Prolema Update dupa ordonare din Select

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje:430

Prolema Update dupa ordonare din Select

Salut,
Am o secventa PHP care nu functioneaza corect:

Cod: Selectaţi tot

<?php
$i=1;
while ($i<=$count1){   // $count1 este numarul de inregistrari si este variabil.
$nu1="SELECT min(pozitie1) as min, lista1_id, rang1 from lista1 where rang1=0";
$num1 = mysql_query($nu1) or die(mysql_error());
$randnum = mysql_fetch_assoc($num1) ;
$id=$randnum['lista1_id'];
$ianum="UPDATE lista1 set rang1=$i where lista1_id=$id";
$punenum =mysql_query($ianum) or die(mysql_error());
$i++;
}
?>
Inital toate inregistrarile au 0 la rang1. Functioneaza, dar incorect. In BD a rezultat cam asa:

Cod: Selectaţi tot

lista1_id          rang1             pozitie1
81                  1                      6  
82                  2                      2
82                  3                      4
84                  4                      5 
85                  5                      3
desi trebuia ca rang1 sa fie atribuit succesiv in functie de min(pozitie1). SELECT-ul nu depinde de $i, dar UPDATE da. Poate aveti ceva idei, ca eu nu mai am.

MarPlo Mesaje:4343
Salut
Incearca sa aplici "ORDER BY pozitie1" la acel select.
Adica asa:

Cod: Selectaţi tot

SELECT min(pozitie1) as min, lista1_id, rang1 from lista1 where rang1=0 ORDER BY pozitie1
Sau daca nu e necesara valoarea "min", poate e bun acest Select:

Cod: Selectaţi tot

SELECT lista1_id, rang1 from lista1 where rang1=0 ORDER BY pozitie1 LIMIT 1

andras Mesaje:430
Am renuntat la MIN(pozitie1) care am observat ca nu merge cind ai mai multe conditii (scoate intotdeauna ordonat dupa ID-ul tabelei, adica lista1_id) si am pus

Cod: Selectaţi tot

SELECT lista1_id FROM lista1 WHERE rang1=0 ORDER BY pozitie1 LIMIT 1
, asa functioneaza corect. Totusi nu inteleg, teoretic ar fi trebuit sa functioneze din prima. Sa fie un bug al MYSQL? Greu de crezut. Oricum, multumesc.

Subiecte similare