Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Automatyczny UPDATE rankingu gracza w tabel
Forum PHP.pl > Forum > PHP
fpierf
Witam ,
mam tabele zawodnikow "zawodnicy" skladajaca sie miedzy innymi z pol id,nazwisko,punkty. Teraz zaszla potrzeba dodania pola miejsce, ktore bedzie sie uaktualnialo automatycznie. Dane wprowadzam przez formularz w ktorym podaje tylko ilosc zdobytych punktow i id gracza. Do tej pory wyswietlalem liste zawodnikow sortujac ja wedlug punktow (ORDER BY punkty) dodajac numeracje rosnaco przez ($lp=1 ... $lp++). Teraz potrzebuje "wyciagnac" aktualne miejsce gracza z tabeli, zeby uzyc je w innych tabelach... nie mam jednak pojecia jak do tego sie zabrac sad.gif


ID | NAZWISKO | PUNKTY | MIEJSCE
1 | nazwisko1 | 12 | 2
2 | nazwisko2 | 10 | 3
3 | nazwisko3 | 19 | 1
4 | nazwisko4 | 2 | 4

To co jest na czerwono powinno sie aktualizowac automatycznie, czyli jak nazwisko1 zdobedzie 8pkt i zostanie to przeslane przez formularz , tabela powinna wygladac tak :

ID | NAZWISKO | PUNKTY | MIEJSCE
1 | nazwisko1 | 20 | 1
2 | nazwisko2 | 10 | 3
3 | nazwisko3 | 19 | 2
4 | nazwisko4 | 2 | 4

Z gory dziekuje za pomoc ... winksmiley.jpg
wookieb
Uzyj triggerów
google -> mysql create trigger
fpierf
Poczytalem o tych triggerach , ale za bardzo tego nie kumam... Rozumiem mniej wiecej jak zrobic UPDATE pola , ale nie wiem jak mialo by sie to zrobic automatycznie po zliczeniu punktow...

Moze jakas inna metoda, albo dokladniejszy opis triggerow, jak sie inaczej nie da winksmiley.jpg , dzieki
wookieb
A co z podstawowych informacji o triggerach potrzebujesz co nie jest zawarte w manualu?
fpierf
Zrobilem to w ten sposob :
Kod
$lista_posortowana = "SELECT id_gracz, nick, punkty FROM gracze ORDER BY punkty DESC";
$poszukiwany= $_POST['nick'];
$wynik = mysql_query($lista_posortowana) or die (mysql_error());
$poz=0;
while ($pozycja=mysql_fetch_row($wynik))
{
$poz++;
for ($i=0;$i<mysql_num_fields($wynik); $i++){
     if ($poszukiwany==$pozycja[$i])
  {
   echo "Gracz <i> ".$poszukiwany."</i> jest<i> ".$poz."</i> w rankingu.<br>";
   $pozycja_zawodnika=$pozycja;
     mysql_query("UPDATE gracze SET ranking = $poz WHERE nick = '".$_POST['nick']."'");

   }
}
}
mysql_free_result($wynik);

i wszystko dziala jak nalezy, ale nie przemyslalem jednej sprawy... gdy na przyklad gracz o id_1 jest pierwszy w rankingu , a po uaktualnieniu gracz o id_2 wskoczy na 1 miejsce, to gracz id_2 jest pierwszy w rankingu , ale gracz id_1 tez pozostaje pierwszy...
i teraz pytanie, jak UPDATE-owac pozostalych graczy, ktorzy nie sa podanie w formularzu ?
thek
Przyjrzyj się na czym polega upgrade pozycji. To zamiana miejscami wszystkich graczy od dawnej pozycji do nowej pozycji. Podam przykład byś zauważył co trzeba zrobić...
a) Miał gracz 100pkt (7miejsce)
b) dostał 5pkt (wskoczył na 4 miejsce),
c) wszyscy, którzy wcześniej byli od miejsca 4 do 6 (włącznie) spadają o 1 miejsce w dół.

Chyba już wiesz co należy zrobić :)

Żebym nie zapomniał. Uważaj na to co robisz przy update. Musisz wykluczyć własnie przeniesionego wyżej usera z zapytania update, bo możesz go przy okazji także przenieść o oczko w dół winksmiley.jpg Tutaj warto zastosować dodatkowo id <> id_przenoszonego_usera smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.