Autor | Zpráva | ||
---|---|---|---|
Hu GO Profil * |
#1 · Zasláno: 2. 8. 2005, 19:48:20
Mám (aspoň na mě) dost složitý problém a chtěl bych poradit:
-Zapisuji časy, jak dlouho každý hrál do tabulky vysledky (společně s ostatními sloupci: id, nick, cas, den, mesic, rok, body) -body jsou hned po odehrani uzivatelem nulove, ty se nastavuji každý den porovnáním s ostatními výsledky (spuštěním scriptu) -celkové body každého uživatele mám ve zvláštní tabulce "users" spoju s jinými údaji. Po přiřazení bodů do tabulky "vysledky" chci přičíst bodový zisk k bodům, co tam doteď má. PHP script, co jsem napsal z toho co umim vypada asi takhle: -možná by mohl fungovat, ale je strašně (zbytečně?) složitý a hlavně při větším počtu hráčů by asi trval víc než 30s (max. povoleno) <? /*zapíšou se výsledky + body*/ $den= date("j"); $mesic= date("n"); $rok= date("Y"); $zaznam= mysql_query("SELECT `id` FROM vysledky WHERE `den`='$den' AND `mesic`='$mesic' AND `rok`='$rok' "); $pocet= mysql_num_rows($zaznam); if ($pocet % 2 != 0) { /* zbytek po dělení*/ $pocet++; } $pbod= $pocet/2; /*pocet obodovanych - oboduji polovinu celkových hráčů za dnešní den*/ $zaznam= mysql_query("SELECT `nick` FROM vysledky WHERE `den`='$den' AND `mesic`='$mesic' AND `rok`='$rok' ORDER BY cas LIMIT 0," .$pbod ); $i=0; while ($vysledek= mysql_fetch_array($zaznam) ): $i++; $oceneny[$i]= $vysledek["nick"]; /*$oceneneny s nejmenším $i bude nejrychlejší, získá nejvíc bodů*/ endwhile; /*na konci bude $i = $pbod */ /*teď mě napadá, že by šlo místo while použít for*/ /*doplňení bodů do tabulky vysledky */ /* $pbod: počet bodovaných hráčů $bzisk: bodový zisk uživatele */ $a=0; for ($bzisk= $pbod; $bzisk>= 1; $bzisk--; ) { $a++; $zaznam= mysql_query("UPDATE vysledky SET body='$bzisk' WHERE nick='$oceneny[$a]' AND den='$den' AND mesic='$mesic' AND rok='$rok' "); /*doplňení bodů do tabulky users */ $zaznam["a"]= mysql_query("SELECT `body` FROM users WHERE nick='$oceneny[$a]' "); while ($pred= mysql_fetch_array($zaznam["a"]) ): $bpak= $pred["body"] + $bzisk; $pricti= mysql_query("UPDATE users WHERE nick='$oceneny[$a]' SET body='$bpak' "); endwhile; };/*konec cyklu for*/ ?> Dotazy: Nejde to nějak zjednodušit / není to zbytečně složité? existuje mysql_příkaz, který přičte k aktuální hodnotě v DB určitou proměnou? Dá se zadat víc příkazů v jednou mysql_query? jak? (Při velkém počtu uživatelů by byl ohrožen limit počtu připojování) Moc děkuji za všechny rady. |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0