Jump to content
php.lv forumi

Recommended Posts

Posted (edited)

Ir tabula:

ID kvits_id

-------------

1 100

2 101

3 102

4 100

5 100

 

Kā lai iegūst pirms pēdējo ierakstu kur kvits_id ir 100. Respektīvi ierakstu ar ID 4.

Edited by localhero
Posted (edited)

Nu doma tāda ka ir 2 tabulas: kvitis un darbibas. kvitis - ierakstīta informācija par klientu, tel. num. apraksts utt darbibas - tiek veikti ieraksti par kvitim(pagarinatas, 2. reizi pagarinatas, 3. reizi pagarinats). respektīvi vienai kvītij var būt gan 2 darbības gan 20 un lai kļūdas gadījumā varētu UNDO pēdējo darbību ir vajadzigs noskaidrot kāds ir bijis iepriekšpēdējais stāvoklis.

Bet šķiet kā jau tas bieži gadās tikko iepostē jautājumu atbilde atrodas uzreiz.

$rezultats = mysql_query("SELECT id FROM kvitis WHERE kvits_id = '100'");
$pp_rinda = (mysql_num_rows($rezultats) - 2);
$rezultats = ( SELECT * FROM 'darbibas' WHERE kvits_id = '100' LIMIT '$pp_rinda', 1);

Edited by localhero
Posted

Paldies GedroX kā naglai uz galvas. Es zināju ka kaut kam tādam ir jābūt bet laikam nespēju pareizi googlee noformulēt savas vajadzības.

Posted
Nu doma tāda ka ir 2 tabulas: kvitis un darbibas. kvitis - ierakstīta informācija par klientu, tel. num. apraksts utt darbibas - tiek veikti ieraksti par kvitim(pagarinatas, 2. reizi pagarinatas, 3. reizi pagarinats). respektīvi vienai kvītij var būt gan 2 darbības gan 20 un lai kļūdas gadījumā varētu UNDO pēdējo darbību ir vajadzigs noskaidrot kāds ir bijis iepriekšpēdējais stāvoklis.

Bet šķiet kā jau tas bieži gadās tikko iepostē jautājumu atbilde atrodas uzreiz.

$rezultats = mysql_query("SELECT id FROM kvitis WHERE kvits_id = '100'");
$pp_rinda = (mysql_num_rows($rezultats) - 2);
$rezultats = ( SELECT * FROM 'darbibas' WHERE kvits_id = '100' LIMIT '$pp_rinda', 1);

 

Skatoties uz šitādiem SQLiem kur nav nekādu ORDER BY klauzu man tomēr rodas jautājums - vai kāds zin, ka kaut kur MYSQL dokos (vai kaut kur citur) ir rakstīts, ka bez ORDER BY rezultāts vienmēr būs vienā noteiktā sakārtojumā?

Fiksi pameklējot googlē neko tādu neizdevās atrast...

 

Gints Plivna

http://datubazes.wordpress.com

Posted
Skatoties uz šitādiem SQLiem kur nav nekādu ORDER BY klauzu man tomēr rodas jautājums - vai kāds zin, ka kaut kur MYSQL dokos (vai kaut kur citur) ir rakstīts, ka bez ORDER BY rezultāts vienmēr būs vienā noteiktā sakārtojumā?

 

Nav ne rakstīts, ne apgalvots un pavisam noteikti tas tā nav!

Posted

man gan domāts atgriezīs tā kā ir ierakstīts fiziski... Bet vismaz M$SQL ir tāda fīča `clustered index`, tas ir tad, kad ieraksts fiziski tiek ierakstīts starpā - tobiš dati jau tiek fiziski glabāti sasortēti pēc tāda indeksa.

Posted (edited)

Žēl, ka neievieš normāli to fīču, kas nesortētos atgrieztu random secībā.

Edited by Kavacky
Posted

GedroX - ir aizdomas (nepamatotas © Buls), ka Kavacky to domāja ironiski - lai vienreiz izbeigtos šīs lietas - cerēt atlasīt kaut kādā noteiktā secībā no tabulas datus, bez ORDER BY izmantošanas.

Posted
tiek veikti ieraksti par kvitim(pagarinatas, 2. reizi pagarinatas, 3. reizi pagarinats). respektīvi vienai kvītij var būt gan 2 darbības gan 20 un lai kļūdas gadījumā varētu UNDO pēdējo darbību ir vajadzigs noskaidrot kāds ir bijis iepriekšpēdējais stāvoklis.

 

Sūdīgs arhitekts tabulai... uztaisa papildus lauku $version ... un ar -1 dabū konkrētu rindu, nevis sortē un paņem offsetu. Cits stāsts, ja $version maina cilvēks, teiksim no 1.0 uz 1.75... (versionēšanas sistēmas), bet šeit tu vari zibraukt cauri ar +/- 1 sistēmu.

 

Otrs variants - glabāt vecās versijas citā tabulā un aktuālās īstajā tabulā. Tad paņem vēcako kvīti `pārsviež` uz īsto - vot tev i UNDO operācija... Arī turmpāk selektēties ērtāk - tikai pa īstām kvītīm :)

Tas pat būtu pareizāk!

Posted

Delfins nesapratu tavu $version domu.

Bet runajot par otro variantu ta ari tiek darits. Ir tabula kvits kur glabajas nemainigie dati par kviti(Kvits id, klienta vards uzvards, telefona nummurs, apraksts utt) un ir tabula darbibas kur izmainju gadijuma tiek ievietoti jaunie datumi, summas utt. Vai ir iespejams vel optimalak ?

×
×
  • Create New...