Jump to content
php.lv forumi

Tabulas ierakstu kārtošana pēc diviem parametriem


Mr.SergE

Recommended Posts

Droši vien, ka mans jautājums skanēs triviāli un risinājums ir elementārs, bet es līdz tam nespēju aizrakties pats. Tātad, ir dots, ka ir tabula ar aptuveni tādiem datiem:

 

 

npk | id | record |

1 | A | kakumaiss |

2 | A | otrais kakumaiss |

3 | B | asbests |

4 | B | asfalts |

5 | B | kastrolis |

6 | C | rentgens |

7 | D | opus |

8 | D | atmosfēra |

...

 

npk -- unikāls identifikācijas numurs, pēc kura pēcāk kārto, lai izvadītu datus

id -- dažādus record kolonnas ierakstus vienojošs identifikācijas numurs

record -- ieraksti

 

Augstāk minētā tabula tiks izvadīta gala lietotājam pēc principa -- taisam grupas pēc id kolonnas, kurās rādam record ar saviem unikālajiem npk. Pēc augstāk minētās tabulas, sanāktu četras rindas:

 

Saraksts

---------

A: kakumaiss (1), otrais kakumaiss (2)

B: asbests (3), asfalts (4), kastrolis (5)

C: rentgens (6)

D: opuss (7), atmosfēra (8)

 

Līdz šim brīdim mani nekas nesatrauc un es visu saprotu.

 

Bet tagad sākās problēma: man ir nepieciešams pie augstāk redzamā saraksta, pie katras id grupas (piemērā -- A, B, C, D) klāt nāks iespēja mainīt pozīcijas. T.i. -- vajag paredzēt iespēju A grupu pavirzīt zem B grupas. Vai D grupu pacelt virs C grupas. Es ceru, ka izsakos pietiekami skaidri.

 

Mans izdomātais variants balstās uz to, ka varētu samainīt abu grupu npk vietām, bet īsti nav skaidrs, kā to izdarīt, jo:

1) vai to tehniski var atrisināt, netaisot vēl vienu tabulu

2) vai to tehniski var atrisināt zinot, ka dažādās id grupās var būt dažāds id skaits

 

Būšu ļoti priecīgs, ja kāds būs iebraucis lietas būtībā un sapratis, ko es vēlos uzzināt!

Link to comment
Share on other sites

Lieto divas kolonnas priekš kārtošanas tās vienas nr vietā:

 

grupas_nr | nr_grupā | id | record |

0 | 0 | A | kakumaiss |

0 | 1 | A | otrais kakumaiss |

1 | 0 | B | asbests |

1 | 1 | B | asfalts |

1 | 2 | B | kastrolis |

2 | 0 | C | rentgens |

3 | 0 | D | opus |

3 | 1 | D | atmosfēra |

 

Un tad, kārtojot ierakstus, norādi divas kolonnas pēc kurām kārtot - vispirms pēc grupas_nr un pēc tam pēc nr_grupā.

Kautkgan prātīgāk būtu no grupas_nr ienest atsevišķā tabulā, lai ik katru reizi, kad gribi mainīg grupu kārtību, nenāktos updeitot kaudzi ar ierakstiem. Labāk būtu updeitot vienu rindu tajā otrajā tabulā.

Link to comment
Share on other sites

grupas_nr | nr_grupā | id | record |

0 | 0 | A | kakumaiss |

0 | 1 | A | otrais kakumaiss |

1 | 0 | B | asbests |

1 | 1 | B | asfalts |

1 | 2 | B | kastrolis |

2 | 0 | C | rentgens |

3 | 0 | D | opus |

3 | 1 | D | atmosfēra |

Kolonnas grupas_nr un id faktiski ir vienlidzigas pec nozimes tabula.

Praktiskak butu bubu variants ar vel vienu tabulu kur glabatu kartibu kas kam atbilst.

tad vienu no kolonnam var nelietot vai aizstat ar ko citu, piemeram laiku kad ieraksts veikts.

Ta var papildu kartot vel hronologiski ja ir tada vajadziba.

Edited by mounkuls
Link to comment
Share on other sites

Es droši vien būtu būtu izveidojis papildus tabulu, kur būtu:

grupas_id | cipars_kaartoshanai

A | 1

B | 3

C | 4

D | 2

 

Un tad selektējot no galvenās tabulas, piemestu klāt LEFT JOINā šo tabulu un kverija galā ORDER BY taa_otra_tabula.cipars_kaartoshanai.

 

Cerams, ka pareizi sapratu tavu problēmu.

Link to comment
Share on other sites

Paldies, tās jau ir idejas. Bet man galvenā problēma nav saistīta ar to, kā sakārtot ierakstus, galvenā problēma ir ar to, kā samainīt pašus ierakstus vietām.

T.i., ja ir:

A | 1

B | 3

C | 4

D | 2

Kā tagad panākt, lai A ar B samainītos vietām?

Izselektēt A, piešķirt A vērtību 3, pēc tam izselektēt B un piešķirt A vērtībās? Tad kā nokontrolēt gadījumus, ja A un B nesakrīt ierakstu skaits?

Link to comment
Share on other sites

Par to samainīšanu tu pareizi domā, bet

 

OK, sapratu tavu domu -- taisam otru tabulu. Tagad rodas jautājums tomēr par to selektēšanu:

A=1, B=3

nomainam A pret B vērtību

A=3, B=3

nomainam B pret A vērtību

A=3, B=3

 

Tātad kaut kur tomēr kaut kas ir atsevišķi jāglabā vai kā?

Link to comment
Share on other sites

Neesmu drošs, ka sapratu par ko tu īsti runā pēdējā postā, bet tā doma ir tāda, ja tev ir:

A | 1

B | 3

C | 4

D | 2

 

Kas nozimē, ka ieraksti kārtosies šādi:

A

D

B

C

 

Bet tu gribi, lai kārtojas šādi:

A

B

D

C

 

Tad tev ir B un D vērtības papildustabulā jāsamaina vietām:

A | 1

B | 2

C | 4

D | 3

Link to comment
Share on other sites

Neesmu drošs, ka sapratu par ko tu īsti runā pēdējā postā, bet tā doma ir tāda, ja tev ir:

A | 1

B | 3

C | 4

D | 2

 

Kas nozimē, ka ieraksti kārtosies šādi:

A

D

B

C

 

Bet tu gribi, lai kārtojas šādi:

A

B

D

C

 

Tad tev ir B un D vērtības papildustabulā jāsamaina vietām:

A | 1

B | 2

C | 4

D | 3

 

Tas, ko es nevaru saprast, ir kā reāli dzīvē tu tos ierakstus taisies mainīt vietām.

Link to comment
Share on other sites

$a = SELECT seciiguma_nr FROM kartoshanas_tabula WHERE grupas_nosaukums = A;

$b = SELECT seciiguma_nr FROM kartoshanas_tabula WHERE grupas_nosaukums = B;

UPDATE kartoshanas_tabula SET seciguma_nr = $b WHERE grupas_nosaukums = A;

UPDATE kartoshanas_tabula SET seciguma_nr = $a WHERE grupas_nosaukums = B;

 

Nu kaut kā šitā.

Link to comment
Share on other sites

Jāmaina jau tikai tajā tabulā kur glabājas

A | 1

B | 3

C | 4

D | 2

to var ar SET vēsā mierā.

Man gan liekas ka vairāk tēmas autoru uztrauc kā tos numurs_grupā lai pieradina pie skaita.

Man liekas, ka tas pat nav jādara, jo daudz sakarīgāk būtu ieviest kolonnu time kur glabā laiku kad tika veikts ieraksts un tabulai ierakstu id likt kā auto_increment.

Selektē ārā pēc tam no grupas vadoties pēc time un grupas_nr ar ORDER BY time.

Būs gan skaits gan secība ja vajag.

Ja man nav taisnība, pielabojiet.

es pats tikai mācos vēl.

Link to comment
Share on other sites

$a = SELECT seciiguma_nr FROM kartoshanas_tabula WHERE grupas_nosaukums = A;

$b = SELECT seciiguma_nr FROM kartoshanas_tabula WHERE grupas_nosaukums = B;

UPDATE kartoshanas_tabula SET seciguma_nr = $b WHERE grupas_nosaukums = A;

UPDATE kartoshanas_tabula SET seciguma_nr = $a WHERE grupas_nosaukums = B;

 

Nu kaut kā šitā.

 

Paldies, sapratu -- kaut kā neienāca prātā, ka var taču uzreiz divus selektus glabāt mainīgajos, hi hi. Laikam vakars klāt.

Tad man rodas jautājums, vai nav iespējams tad tomēr iztikt bez papildus tabulas?

Link to comment
Share on other sites

Nu tīri teorētiski man šobrīd tas būtu daudz vienkāršāk, jo tabula, ko minēju sākumā, ir jau gatava un ar samērā daudz ierakstiem, tāpēc negribas vēl vienu tabulu taisīt, kurā tad to jauno loģiku vēl mēģināt ieviest -- neredzu īsti līdz galam iespēju, kā to jauno tabulu uztaisīt automātiski, ne ar rociņām.

Link to comment
Share on other sites

Es laikam tevi neesmu pareizi jau no paša šakuma sapratis, jo man gan liekas, ka to secību tak jebkurā gadijumā ar rociņām ir jādefinē.

 

Protams, var jau

SELECT DISTINCT grupas_nosaukums FROM galvenaa_tabula

 

Un pēc tam lūpot cauri tiem ierakstiem un krāmēt iekšā katru grupu papildus tabulā. Un seciibas numurus salikt defaultus (1,2,3 utt.)

Edited by andrisp
Link to comment
Share on other sites

×
×
  • Create New...