Autor Zpráva
Meelkor
Profil *
Zdravím. Mám jednoduchý php script
while($kon = mysql_fetch_assoc($sql)){
if($i == $kon["pozice"]){$i++;}
}

A potřebuji, aby když se splní podmínka $i == $kon["pozice"], tak aby ten while zase začal úplně odzačátku a prošel zase všechny záznamy.
Zkoušel jsem
while($kon = mysql_fetch_assoc($sql)){
if($i == $kon["pozice"]){$i++; reset($kon);}
}

ale to mi nepomohlo. Jak by se to dalo prosím udělat?
Tori
Profil
Meelkor:
A kdy má ten cyklus skončit? Takhle se může opakovat až tolikrát, kolik bude řádků výsledku.
Můžete kdyžtak napsat, k čemu to slouží? Třeba by to šlo udělat jen jedním průchodem.
Joker
Profil
Meelkor:
No v první řadě se resetuje špatná proměnná, protože $kon je jeden záznam z výsledku, výsledek dotazu by měl být v $sql.
Na posouvání ukazatele ve výsledku MySQL dotazu slouží mysql_data_seek.

Krom toho sice nevím co to má řešit, ale mám takové tušení, že to vůbec nebude potřeba a stačil by jen vhodný SQL dotaz, nebo vhodně upravit ten cyklus.

(edit: vhodný SQL dotaz, aby to nebylo matoucí)
Meelkor
Profil *
No potřebuji vlastně najít nejnižší chybějící číslo v ose přirozených čísel. Jak by se tedy dalo najít? Děkuji moc! :)
Tori
Profil
Meelkor:
Řádky z databáze asi nejsou řazené podle 'pozice', že? A používáte dál ta data z db, anebo slouží jen na zjištění té mezery v řadě?

edit: Joker: ↓ Díky. :-)
Joker
Profil
Meelkor:
Tak na to by možná stačil databázový dotaz (pokud odpověď na Toriho Toriino A používáte dál ta data z db? je Ne):

SELECT (t1.sloupec+1) FROM `tabulka` t1 LEFT JOIN `tabulka` t2 ON  t2.sloupec=(t1.sloupec+1) WHERE (t2.sloupec IS NULL) ORDER BY t1.sloupec
Vypíše čísla z rozsahu (minimální hodnota sloupce) - (maximální hodnota sloupce + 1), která v tabulce nejsou. Po přidání LIMIT 1 to vypíše jen to nejnižší
Akorát to počítá od minimální hodnoty sloupce, čili by to asi chtělo ještě rozšířit, že pokud v tabulce není číslo 1, je minimum 1.

edit ↑ Tori, omlouvám se, opraveno. Další edit, ještě upraveno :)
Meelkor
Profil *
Yosh, funguje skvěle, děkuji! :-)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: