![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 18.08.2003 Skąd: Sztutowo Ostrzeżenie: (0%) ![]() ![]() |
Skrypt piłkarski
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.
![]() --- nospor -------------------- --
pozdrawiam, Igor |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Hehehe przeciez to logiczn, zobacz ile masz odwolan do bazy, mniej odwolan mniejszy czas. Zastanow sie i przenies to na serwer baz danych a nie na php. Zamiast tylu zapytan mozesz wykonac 1 ktoro bedzie efektywniejsze.
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 18.08.2003 Skąd: Sztutowo Ostrzeżenie: (0%) ![]() ![]() |
Na pewno jest prostsze rozwiązanie jednak jestem początkujący w dziedzinie baz danych dlatego prosiłbym o bliższe wskazówki. Z góry dziękuje
![]() -------------------- --
pozdrawiam, Igor |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 2 Dołączył: 29.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
a nie prosciej update'owac tabele tylko wtedy gdy dodajesz wynik? wpisujesz na przyklad 2:1 dla gospodarzy, dodajesz do punktow 3, do meczow 1, do bramek strzelonych 2 itd. po co obliczac jeszcze raz wszystkie mecze i punkty?
poza tym na pewno zmienilbym strukture tabeli liga, w koncu wystarczy id, id gospodarza, id goscia i wynik. a kto wygral, czy zremisowal mozna sobie po wyniku sprawdzic. to pierwsze co mi przychodzi na mysl greets |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 18.08.2003 Skąd: Sztutowo Ostrzeżenie: (0%) ![]() ![]() |
shield - Twoje rozwiązanie nie wchodzi w grę. Ja cały terminarz tworzę już przy dodawaniu ligi, a później już tylko edytuje poszczególne kolejki. Co np, jeśli wynik będzię błędny lub, co częściej się zdarza padnie walkower? Struktury tabeli także nie będę zmieniał. Szukam po prostu optymalniejszego rozwiązania od mojego...
-------------------- --
pozdrawiam, Igor |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Trzymal bym sie wersji @shield, w bazach danych trzyma sie dane do wyliczen a nie wyloczone, zawsze mozesz sobie poprzeliczac, w tym przypadku beda proste regulki. A co do tych walkowerow itd, to dodatkowa tabele z wynikiem i typem wyniku z powiazaniem z zespolami. To co pisal @shield tylko bardziej rozbudowane.
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 449 Pomógł: 0 Dołączył: 26.05.2004 Skąd: Nowy Sącz Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio przerabialem pewna stronke wlasnie aby mozna bylo na niej wyswietlac te wszystkie tabele rozgrywki punkty itp. Z tym ze baze danych zrobilem od podstaw. Strona nie jest duza ale baza danych przygotowana jest chyba przyjac wszystkie druzyny w Polsce. stronka
Takie mam tabele: Sezon Grupa(liga) Zespol Kolejka(data meczu) Mecze Z tabeli Mecze obliczane sa wszystkie punkty. W tabeli sa takie rekordy: ID_sezon ID_grupa ID_kolejka ID_gospoadarze ID_goscie wynik_gospodarze wynik_goscie Do obliczenia jednej tabeli ktora wyswietla punktacje mam tylko dwa zapytania do bazy. Jedno - pobieram z bazy danych okolo 60-100 meczy z danej grupy. Drugie - pobieram nazwy druzyn. I nie mam petli, tylko dwa zapytania do bazy - wiec to chyba nie jest duzo. Potem reszta obliczen juz jest zrobiona w tabeli w php. Na razie dziala bardzo szybko biorac pod uwage ze sortowanie punktacji jest nieco zawiłe w przypadku gdy trzeba obliczac mecze bezposrednie. Musisz stanowczo zmniejszyc ilosc zapytan do bazy. Albo generowac gotowa tablice lub plik z tymi wynikami tylko wtedy gdy admin edytuje dane (gdy wprowadza mecze, wyniki itp) Klient ogladajacy strone nie bedzie wtedy uruchamial calego tego skryptu generujacego wyniki tylko bedzie pobieral gotowa obliczona tabele z bazy danych lub pliku. ps Jak masz zrobione sortowanie gdy druzyny maja po tyle samo pkt ? I wtedy trzeba brac pod uwage tylko ich mecze bezposrednie? Ten post edytował yavaho 30.08.2005, 11:00:26 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 02:23 |