Jump to content
php.lv forumi

Recommended Posts

Posted

Relāciju datubāzēm nav tādas ierakstu kārtības - ierakstiem pašiem par sevi select rezultātā nav nekādas kārtības. Pēc būtības vienu dienu tu var saņemt ierakstus kārtībā A B C, bet nākamajā B A C.

Ja gribi, lai ierakstiem ir konkrēta kārtība, tad tie ir jākārto ar ORDER BY. Un kā marcis tev jau saka - tev jālieto vēl viena papildus kolonna ar pozīcijas numuru select rezultātā pēc kā arī tad sakārtot tos ierakstus.

Posted
ierakstiem pašiem par sevi select rezultātā nav nekādas kārtības

Atļaušos oponēt - klāsterētais indekss.

 

bet nesaprotu, kāpēc tu to šeit pieminēji... :) Jo risinājums ir ar orderby+sort kolonna

Posted

tāpēc, ka ieraksti fiziski tiek ielikti atmiņā(diskā) jau secīgi (tiek pārbuildota visa datu atrašanās vietas, ja ieliek kaut ko starpā), attiecīgi pie join-a, relāciju ieraksti tiek pa taisno "ieskanēti" nevis atlasīti (nosacījums, kad nav order by uz to tabulu)

 

Praksē pārbaudīts risinājums :)

Posted

Nē, nu protams var paļauties uz tādām "nedokumentētām" lietām (tb uz to kā konkrēti DB ir implementēta). Tikpat labi var paļauties uz neinicializētām mainīgo vērtībām (pieņemot, ka tur būs 0). Uz daudz ko var tā paļauties... Bet cik tas prātīgi - tas jau cits jautājums.

Ja dokumentācijā/standartā nav teikts, ka rezultātam būs noteikta kārtība, tad tā to vajag arī saprast. Citādi mainīsies db versija/formāts un skaties, ka zili brīnumi tev nenotiekās ;)

Posted
Atļaušos oponēt - klāsterētais indekss.

 

Iespējams ka kaut kādā DBVS, pie kaut kādiem nosacījumiem (spec tabulas veids, spec indekss utml) var vienmēr nolasīt datus noteiktā kārtībā, taču, ja vien tas nav speciāli minēts dokumentācijā, ka tā drīkst darīt un tas ir atbalstīts, es uz to nepaļautos. Jo tas nozīmē šodien ir, rīt (cita versija, cits OS, cits vēl kaut kas) vairs nav.

Un SQL standarts arī jauki saka, ja nav ORDER BY klauzas, tad sakārtojums ir "implementation-dependent".

 

Gints Plivna

http://datubazes.wordpress.com

×
×
  • Create New...