tabela
`tabela_id` ,`druzyna_id`, `liga_id`, `mecze`, `punkty`, `wygrane`, `remisy`, `przegrane`, `strzelone`, `stracone`, `roznica`
wyniki
`wynik_id`, `liga_id`, `data`, `kolejka`, `druzyna_id_1`, `druzyna_id_2`, `wynik_1`, `wynik_2`
Problem polega na tym, że ustalanie tabeli jest w następujący sposób:
- punkty, różnica bramek, bramki strzelone z tabeli `tabela`
- Przy równej ilości punktów drużyn drugim kryterium sortowania nie jest różnica bramek, a bezpośredni mecz (mecze) między tymi drużynami. Zrobiłem sortowanie funkcją uasort z własną funkcją, którą zamieszczam poniżej, ale niestety działa ona tylko w przypadku równej ilości punktów dwóch drużyn. W przypadku równej ilości punktów 3 lub więcej drużyn trzeba brać pod uwagę tzw. "małą tabelkę", czyli sortowanie między tymi drużynami odbywa się w kolejności punkty, różnica bramek, bramki strzelone tylko w meczach między tymi drużynami. Funkcja, którą ja sortuje, w przypadku więcej niż dwóch drużyn błędnie wyznacza wynik sortowania
Kod tabeli:
CODE
for ($i = 0; $i < $ilosc_znalezionych; $i++)
{
$wiersz = $wynik->fetch_assoc();
$tablica[$i][1] = $wiersz['nazwa_druzyny'];
$tablica[$i][2] = $wiersz['mecze'];
$tablica[$i][3] = $wiersz['punkty'];
$tablica[$i][4] = $wiersz['wygrane'];
$tablica[$i][5] = $wiersz['remisy'];
$tablica[$i][6] = $wiersz['przegrane'];
$tablica[$i][7] = $wiersz['strzelone'];
$tablica[$i][8] = $wiersz['stracone'];
$tablica[$i][9] = $wiersz['roznica'];
$tablica[$i][10] = $wiersz['druzyna_id'];
}
//funkcja sortowania
function sortowanie($a, $b)
{
if ( $a[3] == $b[3] )
//sprawdzenie bezpośredniego pojedynku między zainteresowanymi druzynami
{
$zapytanie = "SELECT * FROM `wyniki` WHERE (druzyna_id_1 = {$a[10]} and druzyna_id_2 = {$b[10]}) or (druzyna_id_1 = {$b[10]} and druzyna_id_2 = {$a[10]});";
$wynik = wyslij_zapytanie($zapytanie);
$ilosc_znalezionych = $wynik->num_rows;
for ($i = 0; $i < $ilosc_znalezionych; $i++)
{
$wiersz = $wynik->fetch_assoc();
$druzyna_id_1 = $wiersz['druzyna_id_1'];
$druzyna_id_2 = $wiersz['druzyna_id_2'];
$wynik_1 = $wiersz['wynik_1'];
$wynik_2 = $wiersz['wynik_2'];
if (($a[10] == $druzyna_id_1) and ($b[10] == $druzyna_id_2))
{
if ($wynik_1 > $wynik_2)
{
$punktyA += 3;
}
else if ($wynik_1 < $wynik_2)
[php] {
$punktyB += 3;
}
$bramkiA += $wynik_1;
$bramkiB += $wynik_2;
}
else if (($b[10] == $druzyna_id_1) and ($a[10] == $druzyna_id_2))
{
if ($wynik_1 > $wynik_2)
{
$punktyB += 3;
}
if ($wynik_1 < $wynik_2)
{
$punktyA += 3;
}
$bramkiB += $wynik_1;
$bramkiA += $wynik_2;
}
}
if ($punktyA < $punktyB)
{
return 1;
}
else if (punktyA > $punktyB)
{
return -1;
}
else if ($punktyA == $punktyB)
{
if ($bramkiA < $bramkiB)
{
return 1;
}
if ($bramkiA > $bramkiB)
{
return -1;
}
if ($bramkiA == $bramkiB)
{
if ($a[9] < $b[9])
{
return 1;
}
else if ($a[9] > $b[9])
{
return -1;
}
else if ($a[9] == $b[9])
{
if ($a[7] < $b[7])
{
return 1;
}
else if ($a[7] > $b[7])
{
return -1;
}
else if ($a[7] == $b[7])
{
if ($a[1] < $b[1])
{
return -1;
}
else if ($a[1] > $b[1])
{
return 1;
}
else
{
return 0;
}
}
}
}
}
}
else if ( $a[3] < $b[3] )
return 1;
else if ( $a[3] > $b[3] )
return -1;
}
usort($tablica, 'sortowanie')