Lynx Posted December 29, 2007 Report Share Posted December 29, 2007 Saskāros ar interesantu problēmu, ir šāds te sql pieprasījums: SELECT something FROM karte WHERE id BETWEEN 4850 AND 4860 OR id BETWEEN 4950 AND 4960 OR id BETWEEN 50 AND 60 OR id BETWEEN 150 AND 160 OR id BETWEEN 250 AND 260 Pamatvajadzība ir, ka tieši šādā secībā kā rakstīts pieprasījums dati tiek atgriezti attiecīgi sāk 4850-4860, tad 4950-4960, tālāk seko 50-60 etc. Mysql automātiski bez nekādiem norādītiem ORDER BY saliek sākot no zemākā: 50-60, 150-160, 4850-4860. Pētiju manuāli, iespējas šo fīču atcelt neatradu, varbūt kāds ir meiģinājis kaut ko līdzīgu veidot? Ja tas nav iespējams tad veidošu ar php, vienkārši tikai ar mysql būtu ērtāk, varbūt pat ātrāk? Link to comment Share on other sites More sharing options...
andrisp Posted December 29, 2007 Report Share Posted December 29, 2007 Varbūt nepārāk smuks risinājums, bet: SELECT something, CASE WHEN BETWEEN 4850 AND 4860 THEN 1 WHEN BETWEEN 4950 AND 4960 THEN 2 ... as for_order ... ORDER BY for_order, id Link to comment Share on other sites More sharing options...
Aleksandrs Posted December 29, 2007 Report Share Posted December 29, 2007 MySQL klienta vietā papildus neko nedarīs, kādā secībā ir ierakstīti dati tabulā, tādā arī parādīs. Ja vajag citu secību, tad vajadzēs Order nosacījumus rakstīt klāt. Link to comment Share on other sites More sharing options...
marcis Posted December 29, 2007 Report Share Posted December 29, 2007 Vai ar;i vienkarši liec beigās ODER BY id DESC, jo mysql datus kārto automatisksi pēc ASC ( sākot ar mazāko vērtību ) Link to comment Share on other sites More sharing options...
Lynx Posted December 29, 2007 Author Report Share Posted December 29, 2007 marcis, ORDER BY Desc nestrādā - tad jau vispār nebūtu jautājums. Pārveidojot tos pašus datus vieglāk uzskatāmos sanāk: 9 10 1 2 3. Kā redzi 2as dažādas secības dati wrapojas. Ar desc būtu 10 9 3 2 1 Aleksandrs, tieši tā - tapēc arī ir šis topiks. Pameiģināšu realizēt andrisp variantu. Link to comment Share on other sites More sharing options...
bubu Posted December 29, 2007 Report Share Posted December 29, 2007 Saskāros ar interesantu problēmu... Tā nav nekāda problēma. Tā ir relāciju datu bāžu specifika - tās nu nekādīgi negarantē atgriezto ierakstu kārtību rezultāta datasetā. Vai nu uzdod pats kārtību ar ORDER BY pēc kautkā (kaut vai RAND funkcijas rezultātu), vai arī paļaujies uz kautkādu-sazinkādu kārtību. Visdrīzāk vien tev jādara kā andrisp saka. Tik par ātrdarbību gan tad būs jāpiedomā.. vai mysql tur joprojām izmantos indeksu? Link to comment Share on other sites More sharing options...
marcis Posted December 29, 2007 Report Share Posted December 29, 2007 Ar desc būtu 10 9 3 2 1 Tad jau laikam nebūšu tevi sapratis, jo man likās, ka tā arī vajag Link to comment Share on other sites More sharing options...
Grey_Wolf Posted December 30, 2007 Report Share Posted December 30, 2007 DB dati parasti tiek rakstiiti peec kartas Un taa arii nolasiiti atgriezti, taja briidi kad izdzees kadu ierakstu , paliek tuksa vieta kur nakamrez tiek ierakstiitas jauna vertiba..... tb... Ja sakuma buus 1;2;3;4;5 un izdzesiisi teiksim 3 ierakstu + pievienosi vel vienu tad buus jau 1;2;6;4;5 ...... Un taa taalak.... Link to comment Share on other sites More sharing options...
marcis Posted December 30, 2007 Report Share Posted December 30, 2007 (edited) Grey_Wolf, taču, ja es ulikšu ORDER BY .. DESC, tad taču dati tiks atgriezti šādā secībā: 1;2;4;5;6 6;5;4;2;1 Pareizi? Edited December 30, 2007 by marcis Link to comment Share on other sites More sharing options...
andrisp Posted December 30, 2007 Report Share Posted December 30, 2007 marcis, tas būtu ASC. DESC atgriezīs dilstošā secībā. Link to comment Share on other sites More sharing options...
Grey_Wolf Posted December 30, 2007 Report Share Posted December 30, 2007 (edited) marcis --> jaa vinji tiks izvaditi sakartoti , precizak no tabulas vinji tiks nolasiti kaa Jau es teicu, Un peec tam sakartoti ;) Edited December 30, 2007 by Grey_Wolf Link to comment Share on other sites More sharing options...
Gints Plivna Posted December 30, 2007 Report Share Posted December 30, 2007 Ja kādā vaicājumā ir svarīga atgriezto datu kārtība, tad __vienmēr__ ir jālieto ORDER BY. SQL standarts saka, ka, ja ORDER BY klauzas nav, tad sakārtojums ir implementācijas specifisks. 20.2 <direct select statement: multiple rows>4) If an <order by clause> is not specified, then the ordering of the rows of Q is implementation-dependent. Ja nu gadījumā MYSQL dokumentācijā kaut kur ir rakstīts (par ko es šaubos :), ka dati vienmēr tiek atgriezti ierakstīšanas kārtībā un ka tas tiks nodrošināts tā arī uz priekšu, tad varbūt tādā gadījumā priekš tā konkrētā sakārtojuma ORDER BY arī var nerakstīt, bet, ja tas nekur dokumentācijā tā rakstīts nav, tad arī tas, ka līdz šim man vienmēr datus deva ārā sakārtotus, nav nekāds iemesls nerakstīt ORDER BY klauzu. Piemērs iz Oracles. Līdz 9i versijai GROUP BY rezultātā parasti ieraksti tika sakārtoti blakusefekta rezultātā - lai iegūtu grupēšanas funkcijas rezultātu, ieraksti tika sakārtoti un tā rezultātā dažiem radās maldīga ilūzija, ka group by kārto datus, lai gan Oracle speciāli dokumentācijā vienmēr rakstīja, ka bez ORDER BY nekāds sakārtojums garantēts netiek. Nu lūk un tad radās jauns mehānisms group by implementācijā - HASH GROUP BY - un tā rezultātā jau dati vairs parasti __nav__ sakārtoti. Un tagad diemžēl tā ir (nu jau gan vairāk bija) diezgan izplatīta problēma spriežot pēc forumu jautājumiem. Tā kā nevajag radīt sev liekas potenciālas problēmas ar ko vēlāk būs nevajadzīgi jācīnās. BTW es par to rakstīju arī šeit Vienkāršs SQL Select teikums Gints Plivna http://datubazes.wordpress.com Link to comment Share on other sites More sharing options...
xPtv45z Posted January 2, 2008 Report Share Posted January 2, 2008 SELECT something FROM karte WHERE id BETWEEN 4850 AND 4860 UNION SELECT something FROM karte WHERE id BETWEEN 4950 AND 4960 UNION ... Link to comment Share on other sites More sharing options...
bubu Posted January 2, 2008 Report Share Posted January 2, 2008 xPtv45z: arī tavs kverijs negarantēs, ka katra no tām union daļām atgriezīs ierakstus sakārotus pēc id augošā/dilstošā secībā. Link to comment Share on other sites More sharing options...
andrisp Posted January 2, 2008 Report Share Posted January 2, 2008 Var jau iekš tā katra UNION selecta ielikt vēl ORDER BY. Link to comment Share on other sites More sharing options...
Recommended Posts