Witam, stworzyłem stronę gdzie umieszczam wiele rozgrywek piłkarskich. Strona oparta jest na bazie danych mysql. Tabela z meczami 'liga' ma następującą strukturę:
id | id_ligi| id_gospodarze | id_goscie | wynik_gospodarze | wynik_goscie | zw_gospodarze | por_gospodarze | remis_gospodarze | remis _goscie | por_gospodarze | por_goscie
gdzie w odpowiednich polach od zw_gospodarze do por_goscie znajdują się id_klubów (lub 0)
Np.
id_gospoadarze 100
id_goscie 200
wynik_gospodarze 2
wynik_goscie 1
zw_gospodarze 100
por_gospodarze 0
remis_gospodarze 0
remis _goscie 0
por_gospodarze 0
por_goscie 200
oznacze że drużyna o id 100 wygrała z drużyną o id 200 2-1
I teraz chodzi o wygenerowanie tabeli dla tak zapisanych danych. Zrobiłem to w ten sposób, że najpierw wybieram drużyny, po czym dla każdej drużyny tworzę zapytania licząc ich poszczególne zwyciestwa, remisy, porazki i bramki. Dla 1 druzyny daje to 7 zapytań. Wszystko jest w porządku, tylko że już przy kilkudziesięciu ligach (czyli kilka tysięcy meczów) zauważalny gołym okiem jest wydłużony czas dla takiej operacji. Np. dla ligi 18-zespołowej czas wykonania takiego skryptu wynosi ponad 6 sekund.. Wciąż dodaję nowe rozgrywki i takie rozwiązanie w dalszej perspektywie wydaje się bezsensowne. I tutaj moje pytanie: Czy można ten problem rozwiązać w prostszy i szybszy sposób?
Poniżej mój kod generujący i zapisujący tabele.
<?php $druzyny = mysql_query("SELECT DISTINCT id_gospodarze FROM liga WHERE id_ligi='$_GET[id]'") or die(error); $druzyna=$team[id_gospodarze]; # zw, rem, por $zap1=mysql_fetch_array(mysql_query("SELECT count(id) as suma from liga WHERE id_ligi='$id' AND (zw_gospodarze='$druzyna' OR zw_goscie='$druzyna')")); $zwyciestwa=$zap1[suma]; $zap2=mysql_fetch_array(mysql_query("SELECT count(id) as suma from liga WHERE id_ligi='$id' AND (remis_gospodarze='$druzyna' OR remis_goscie='$druzyna')")); $remisy=$zap2[suma]; $zap3=mysql_fetch_array(mysql_query("SELECT count(id) as suma from liga WHERE id_ligi='$id' AND (por_gospodarze='$druzyna' OR por_goscie='$druzyna')")); $porazki=$zap3[suma]; # bramki strzelone $zap4=mysql_fetch_array(mysql_query("SELECT SUM(wynik_gospodarze) as suma1 from liga WHERE id_ligi='$id' AND id_gospodarze='$druzyna'")); $zap5=mysql_fetch_array(mysql_query("SELECT SUM(wynik_goscie) as suma2 from liga WHERE id_ligi='$id' AND id_goscie='$druzyna'")); $strzelone=$zap4[suma1]+$zap5[suma2]; # bramki stracone $zap6=mysql_fetch_array(mysql_query("SELECT SUM(wynik_gospodarze) as suma3 from liga WHERE id_ligi='$id' AND id_goscie='$druzyna'")); $zap7=mysql_fetch_array(mysql_query("SELECT SUM(wynik_goscie) as suma4 from liga WHERE id_ligi='$id' AND id_gospodarze='$druzyna'")); $stracone=$zap6[suma3]+$zap7[suma4]; ##################################### $mecze=$zwyciestwa+$remisy+$porazki; $punkty=$zwyciestwa*3 + $remisy; mysql_query("UPDATE tabele SET druzyna='$druzyna', mecze='$mecze', punkty='$punkty', zwyciestwa='$zwyciestwa', remisy='$remisy', porazki='$porazki', strzelone='$strzelone', stracone='$stracone' WHERE id_ligi='$_GET[id]' AND miejsce='$i'"); #zapisywanie druzyn do tabeli } #petla 2 $tab=mysql_query("SELECT * from tabele where id_ligi='$_GET[id]' ORDER by punkty DESC,(strzelone-stracone) DESC, strzelone DESC, stracone ASC"); #sortuje i zapisuje druzyny w tabeli w odpowiedniej kolejnosci mysql_query("UPDATE tabele SET druzyna='$dr[druzyna]', mecze='$dr[mecze]', punkty='$dr[punkty]', zwyciestwa='$dr[zwyciestwa]', remisy='$dr[remisy]', porazki='$dr[porazki]', strzelone='$dr[strzelone]', stracone='$dr[stracone]' WHERE id_ligi='$_GET[id]' AND miejsce='$j'"); } ?>

---
nospor