![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 18.12.2008 Skąd: Gostyń/Reda Ostrzeżenie: (0%) ![]() ![]() |
Problem dotyczy sortowania piłkarskiej tabeli ligowej. Operacje przeprowadzane są na dwóch tabelach bazy MySQL:
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') Ten post edytował chipoldo 26.02.2010, 10:53:43 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 04:28 |