Mr.SergE Posted January 8, 2008 Report Share Posted January 8, 2008 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 More sharing options...
bubu Posted January 9, 2008 Report Share Posted January 9, 2008 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 More sharing options...
mounkuls Posted January 9, 2008 Report Share Posted January 9, 2008 (edited) 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 January 9, 2008 by mounkuls Link to comment Share on other sites More sharing options...
andrisp Posted January 9, 2008 Report Share Posted January 9, 2008 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 More sharing options...
Mr.SergE Posted January 9, 2008 Author Report Share Posted January 9, 2008 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 More sharing options...
andrisp Posted January 9, 2008 Report Share Posted January 9, 2008 Par to samainīšanu tu pareizi domā, bet ...A un B nesakrīt ierakstu skaits? Kāda tam nozīme? Link to comment Share on other sites More sharing options...
Mr.SergE Posted January 9, 2008 Author Report Share Posted January 9, 2008 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 More sharing options...
andrisp Posted January 9, 2008 Report Share Posted January 9, 2008 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 More sharing options...
Mr.SergE Posted January 9, 2008 Author Report Share Posted January 9, 2008 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 More sharing options...
andrisp Posted January 9, 2008 Report Share Posted January 9, 2008 $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 More sharing options...
mounkuls Posted January 9, 2008 Report Share Posted January 9, 2008 Jāmaina jau tikai tajā tabulā kur glabājas A | 1B | 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 More sharing options...
Mr.SergE Posted January 9, 2008 Author Report Share Posted January 9, 2008 $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 More sharing options...
andrisp Posted January 9, 2008 Report Share Posted January 9, 2008 Gan jau ka var. Bet vai vajag ? Link to comment Share on other sites More sharing options...
Mr.SergE Posted January 9, 2008 Author Report Share Posted January 9, 2008 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 More sharing options...
andrisp Posted January 9, 2008 Report Share Posted January 9, 2008 (edited) 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 January 9, 2008 by andrisp Link to comment Share on other sites More sharing options...
Recommended Posts