1) To moze chociaz sie odniesiecie, czy robienie czegos takiego ma sens??
2) a moze to zapisywac do tablicy asocjacyjnej?
3) moze do tablicy 2-wymiarowej??
Czekam na sugestie
To pilne, z góry dziękuję
#BEFORE EDIT
Mam następujące zapytanie
<?php $sql = 'SELECT PID, Name, SUM( Skalpy ) as SSk , SUM( Gry ) as SG , SUM( Skalpy ) / SUM( Gry ) AS Rank, tournaments.Data' . ' FROM listarank' . ' LEFT JOIN tournaments ON tournaments.TurnID = listarank.TurnID AND tournaments. ata' . ' BETWEEN ''.$data_turn[\"Data\"].'' - INTERVAL 2 YEAR AND ''.$data_turn[\"Data\"].''' . ' WHERE tournaments.Data IS NOT NULL ' . ' GROUP BY PID' . ' ORDER BY Rank DESC'; ?>
które oblicza mi ranking gracza.
Zasada obliczania rankingu wygląda następująco
(*) zlicz wszystkie partie jakie gracz rozegral w ciagu ostatnich 2 lat
(**) jesli liczba partii przekracza 100 za okres 2 lat zlicz ostatnie 100 rozegranych partii
(***) UWAGA: jesli gracz rozegral 97 partii a we wczesniejszym turnieju 4 partie, to ranking zostanie zliczony z 97 partii a nie ze 101 - z pominięciem jednego - gdyz ranking powinien byc obliczany turniejami
Tyle jezeli chodzi o ideologie obliczania
Moje zapytanie jak widac zlicza tylko za okres 2 lat - bez uwglednienia 100 partii i nie mam zielonego pojecia jakby to zmodyfikować w zapytaniu aby tak robiło.
Aha przyrosty rankingow podane sa w $skalpy z ilu gier (w $gry) i są one powiązane z $TurnID takze warunek *** jest zawsze spelniony jesli suma gier z kolumn pola $gry <= 100 (tylko trzeba to jakoś uwzględnić w zapytaniu

Póki co z problemem poradziłem sobie w następujący sposób (szczerze mówiąc mało elegancki

Po zadaniu w/w zapytania następuje poniższy kod
<?php $i = $k = 0; //zmienne uzywane do wysietlenia danych $vPID = 0; $vName = 0; $vSG = 0; $vRank = 0; if ($dane[\"SG\"] <= 100) { // gdy suma rozegranych gier jest mniejsza niz 100 $vPID = $dane[\"PID\"]; // odczytaj dane $vName = $dane[\"Name\"]; // imie i nazwisko $vSG = $dane[\"SG\"]; // suma rozegranych gier/partii w klubie $vRank = $dane[\"Rank\"]; // ranking zawodnika $vskalpy = $dane[\"SSk\"]; // suma przyrostow rankingow zawodnika // UWAGA: ranking jest to suma przyrostow rankingow zawodnika w n turniejach // podzielona przez m partii ktore gracz rozegral w n turniejach w przeciagu 2 ost tnich lat // jesli ilosc m partii taka ze m > 100 w ciagu ostatnich 2 lat to zlicz ostatnie 100 partii // grupowanych turniejami -> TurnID } else { //gdy suma gier przekracza 100 // wybierz z tabeli wszystkie gry jakie rozegral graz o danym PID // oraz posortuj wg daty turnieju tak aby pierwsze byly turnieje rozegrane ostatni (DESC) $sql = 'SELECT PID, Name, tournaments.Data, Skalpy, Gry' . ' FROM listarank' . ' LEFT JOIN tournaments ON tournaments.TurnID = listarank.TurnID AND tournaments. ata' . ' BETWEEN ''.$data_turn[\"Data\"].'' - INTERVAL 2 YEAR AND ''.$data_turn[\"Data\"].''' . ' WHERE tournaments.Data IS NOT NULL and PID='.$dane[\"PID\"] . ' ORDER BY Data DESC'; $vskalpy = 0; //wyzerowanie zmiennej zliczajacej sume przyrostow rankingu if (($vSG <= 100) and (($vSG + $pers_dane[\"Gry\"]) <= 100)) { // gdy rozegral mniej niz 100 parti i po dodaniu wczesniejszego turnieju ta liczba wciaz jest mniejsza niz 100 // uwzglednia przypadek gdy gracz rozegral 97 partii i we wczesniejszym turnieju 4 co razem daje 101 // bez tego warunku skypt przeliczy zle ranking $vSG = $vSG + $pers_dane[\"Gry\"]; // zlicz ilosc rozegranych gier/partii $vskalpy = $vskalpy + $pers_dane[\"Skalpy\"]; //zsumuj przyrosty rankingu } if ($vSG != 0) {$vRank = $vskalpy/$vSG;} // przeliczane rankingu } $vPID = $dane[\"PID\"]; $vName = $dane[\"Name\"]; } if ($dane[\"SG\"] < 10) { //zaznaczenie ze gracz nalezy do poczekalni tzn rozegral mniej niz 10 partii w klu ie $color = '#FFDDBB'; // kolor tla wiersza $i++; // obliczanie miejsca zajmowanego w poczekalni $miejsce = '» '.$i; $class = 'tekstP'; // wybierz kolorowanie CSS dla poczelalni $aclass = 'txt2'; // wybierz kolorowanie CSS dla linkow w poczekalni } else { $color = '#DDBBAA'; // kolor tla wiersza $k++; //obliczanie miejsca zajmowanego w rankingu klubowym $miejsce = '¤ '.$k; $class = 'tekst'; // wybierz kolorowanie CSS dla rankingu klubowego $aclass = ''; // wybierz kolorwoanie CSS dla linkow w rankingu klubowym } printf ('<tr style=\"background: '.$color.'\"><td class=\"'.$class.'\">'.$miejsce.'</td><td style=\"border-top 1pt solid black;\" class=\"'.$class.'\"><a href=\"gracze.php?SelGraczID='.$vPID.'\" class=\"'.$aclass.'\">'.$vName.'</a></td><td class=\"'.$class.'\">%.2f</td><td class=\"'.$class.'\">'.$vskalpy.'</td><td class=\"'.$class.'\">'.$vSG.'</td></tr>',$vRank); } ?>
Efekt zapytania (bez poprawek) mozna zobaczyc TUTAJ
po wybraniu z menu opcji rankingi
jak widac dla np 53 Turnieju dla osób na miejscu 5 i 8 liczba gier przekracza 100