Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Schemat działania, usuwanie i aktualizacja kilku rekordów w bazie
Forum PHP.pl > Forum > Przedszkole
warna
Witam. Tym razem na dobre utknąłem i muszę zwrócić się do Was o pomoc. Postaram się opisać sytuację w miarę obrazowo:
[ kolejka ]
- mecz
- mecz
- mecz

W każdym meczu mam 2 drużyny, w zależności od ilości strzelonych bramek przydzielane są punkty (2 lub 1). Trzymam je w tabeli z drużynami w osobnym polu.

Przy usuwaniu/edycji wyniku meczu dane dotyczące punktów zmieniają się w tabeli drużyn. Teraz jeśli chciałbym usunąć całą kolejkę. Co za tym idzie muszę usunąć mecze do niej należące i zredukować punkty drużyn za usuwane mecze. I już zaczynają się schody.

Widzę na razie takie rozwiązanie:
- pobranie id meczy, które należą do usuwanej kolejki
- razem z nimi pobieram id drużyn, które grały w danym meczu
- pętla (-.-)" z 2 zapytaniami aktualizującymi punkty dwóch drużyn
- pętla usuwająca mecze o pobranych wcześniej id
- usunięcie kolejki

Istotna część struktury tabel:
Cytat
KOLEJKI
- `queue_id` id kolejki

Cytat
MECZE
- `match_id` id meczu
- `queue_id` id kolejki, do której należy mecz
- `team1` id drużyny nr 1
- `team2` id drużyny nr 2
- `result` rezultat (możliwe jest 5 stanów: 0,0 - wynik 0:0; 1,1 - remis; 2,0 - pierwsza drużyna wygrała; 0,2 - druga drużyna wygrała; 3,3 - pole z wynikami nie zostało jeszcze uzupełnione)

Cytat
DRUŻYNY
- `team_id` id drużyny
- `team_points` liczba punktów uzyskanych przez drużynę


Ma ktoś może pomysł na lepszy schemat działania? Te pętle przy dużej ilości meczy (średnio jest ich 6-7) mogą mi poderżnąć maszynę.

Pozdrawiam.
roobik
Mimo, że nie znam się na punktacji meczów, to proponuję dodać pole o nazwie "pkt" i wpisać tyle punktów, ile zwycięska drużyna zdobyła.
Jeśli zaś jest podział punktów, to przydałyby się dwa pola :
- pkt_a (punkty drużyny 1
- pkt_b - punkty drużyny 2
I moim zdaniem usuwanie rekordów byłoby już tylko formalnością - usuwając rekord - usuwane by były tym samym punkty smile.gif
//edit
Edytowałeś, to i ja zedytuję
Oczywiście nie musze nadmieniać, że tym samym punktacja miałaby silny związek z obiema tabelami winksmiley.jpg
warna
W zależności od tego jaki wpiszę wynik meczu i jaki był poprzedni stan pola result tyle dodaje punktów danej drużynie. Więc po co mi dwa kolejne pola o takiej samej funkcji?

Chodzi mi o to, czy istnieje alternatywa dla tych pętli z zapytaniami? Inaczej jeszcze: czy można w jednym zapytaniu uaktualnić wiele wartości jednego pola?

Teraz przy edycji/usuwaniu jednego meczu wygląda to tak:

1. Zbieram informacje do zmiennych ile punktów danej drużynie odjąć. Masa porównań i warunków (większe, mniejsze, równe, puste, itp, itd). W zależności od tego, czy punkty będą odejmowane, czy dodawane mają różne wartości. Np:
  1. <?php
  2. $points1 = 1;
  3. $points2 = -1;
  4. ?>


2. Jeśli istnieje zmienna $points1, wysyłam zapytanie:
  1. UPDATE teams SET team_points = team_points + $points1 WHERE team_id = $team1


3. Jeśli istnieje zmienna $points2, wysyłam drugie zapytanie:
  1. UPDATE teams SET team_points = team_points + $points2 WHERE team_id = $team2


Oczywiście $team1 i $team2 zawierają id danej drużyny, której zmieniamy punktację.

Załóżmy teraz, że miałbym kilkanaście drużyn do uaktualnienia. Da radę połączyć zapytania, czy muszę je pojedynczo wysyłać?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.