Autor Zpráva
Hu GO
Profil *
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.
Toto téma je uzamčeno. Odpověď nelze zaslat.