Autor Zpráva
Greeg
Profil
narazil osm na prblém keď mi treba zistit pozíciu konktrétneho riadku v zotriedenom vypise z tabulky. o co ide... priklad: mam tabulku vysledkov sprintu: bezec - cas a chcem zistit na ktorom mieste dobehol konkretny bezec so svojim casom.

riesim to tak ze vyberiem vsetkych bezcov a potom nimi postupne prechadzam a hladam toho mojho...

$r = mysql_query("SELECT bezec, cas FROM sprint")

while($v = mysql_fetch_array($r)) {
  $i++;
  if ($v['bezec'] == "moj_bezec") $miesto = $i
}


je to fajn ked mam zakych 10 zaznamov ale pri 2K riadkovej tabulke je to blbost bazen do kopca.

skusil som na to teda ist jednoduchsie
"SELECT COUNT(bezec) FROM sprint WHERE cas< $bezcov_cas"


to sa javi ako celkom rozumne a dokonca aj efektivne, ALE je tu jeden problem, na kazdom mieste sa moze umiestnit iba jeden hrac, a tak ked niekto dobehne v rovnakom case, vznika problem.

viete mi niekto poradit este iny sposob ako sa k tomu dopracovat?
Kcko
Profil
http://www.webfaq.cz/clanek/Mysql-poradi-radku-v-dotazu-druhy-dil-prob lem-poradi-zpracovani-uzivatelskych-promennych
Greeg
Profil
parada parada, vrela vdaka ;)
Kajman_
Profil *
ALE je tu jeden problem, na kazdom mieste sa moze umiestnit iba jeden hrac, a tak ked niekto dobehne v rovnakom case, vznika problem

Tak tam přidáte podmínku na další řazení, třeba id_běžce, nebo tak něco...

SELECT COUNT(bezec) poradi FROM sprint WHERE cas< $bezcov_cas or (cas=$bezcov_cas and id_bezce<=$id_hledaneho)
Greeg
Profil
> Kajman_ toto riesenie je este lepsie, aj ked trochu menej prehladne ked zacnu pribudat podmienky radenia, vdaka.

riesenie cez uzivatelske premenne je sice prehladne, no v php mysql_query nepodporuje multi-statement queries preto to treba rozdelit na 3 samostatne queries ktore dvihnu zataz na srv, tiez query counter (ktory je niektorych hostingoch pekne nizko) a myslim ze je aj o nieco narocnejsie na spracovanie (kedze sa v db musi prelistovat k pozadovanemu riadku, ktory je ako naschval vzdy na konci :P).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0