#
EDIT1) 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 EDITMam 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

i utrudniający sortowanie wyników)
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
TUTAJpo wybraniu z menu opcji
rankingijak widac dla np
53 Turnieju dla osób na miejscu
5 i 8 liczba gier przekracza 100
Ten post edytował Aztech 20.10.2004, 11:05:03