Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP + MYSL] Obrobienie danych po wykonanym zapytaniu
Zdziho
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.04.2016

Ostrzeżenie: (0%)
-----


Cześć, chciałbym ponownie prosić Was o wsparcie. Poddałem się.
Otóż:
Mam dwie tabele:
Zawodnicy i Mecze. Dla uproszczenia Zawodnicy to: id_zawodnik, a Mecze to: id_mecz, id_zawodnik1, id_zawodnik2, pkt_zawodnik1

W momencie rozegrania meczu do tabeli Mecze dodaje 2 wpisy, np.
id_mecz:1 (AI), id_zawodnik1:5, id_zawodnik2: 6, pkt_zawodnik1: 3
id_mecz:2 (AI), id_zawodnik1:6, id_zawodnik2: 5, pkt_zawodnik2: 1

I teraz do sedna: chce wyświetlić rozegrane mecze w formie tabeli (Jakiś znaleziony przykład).
Umiem to zrobić tylko w bardzo złe sposoby. 1) poprzez SQL'a w pętli podczas generowania tabeli. Dla każdej komórki tabeli sprawdzam czy istnieje mecz where id_zawodnik1 = and id_zawodnik2 = . Co jest oczywiście głupie bo liczba zapytań będzie rosła wraz z liczbą zawodników.
2) Na początku miesiąca wstawiam do tabeli mecze mecze każdy z każdym z jakąś wartością, która powie mi, że te mecze to "fake".
To rozwiązanie też mi sie nie podoba bo musiałbym co miesiąc o to dbać (w sensie znowu "jakoś" to zautomatyzować), a po drugie po co mi w tabeli wpisy, które nie są rzeczywistymi meczami. :/

No więc robiąc LEFT JOIN
  1. SELECT * FROM Mecze LEFT JOIN Zawodnicy ON Zawodnicy.id_zawodnik = Mecze.id_zawodnik2
mogę sobie odebrać tylko i ażwszystkie rozegrane mecze. Chciałbym to uzupełnić o wszystkie warianty dla każdego zawodnika (przykład niżej)
Nie umiem teraz obrobić tych danych w taki sposób, żeby móc to wyświetlić w tabeli jaką pokazałem wyżej. Przydałoby mi się mieć coś na zasadzie:
id_zawodnik vs id_zawodnik2
1 vs 2 (JEŚLI TAK: echo pkt_zawodnik1, JEŚLI NIE: echo 'bd')
1 vs 3 (JEŚLI TAK: echo pkt_zawodnik1, JEŚLI NIE: echo 'bd')
1 vs 4
2 vs 1
2 vs 3
2 vs 4
...

Może mi ktoś podpowiedzieć jak mogę otrzymać wyniki w takiej formie (php lub mysql)?

Ten post edytował Zdziho 11.04.2016, 12:03:41
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
piotras
post
Post #2





Grupa: Zarejestrowani
Postów: 41
Pomógł: 0
Dołączył: 8.07.2009

Ostrzeżenie: (0%)
-----


1. Masz tabelę Mecze
2. Masz tabelę Zawodnicy
3. Masz tabelę mecze_zawodnicy, ktora ogarnia Ci relacje Mecz - Zawodnik

Tak powinienes to zrobic.

Jak masz to zrobione w OOP to w konstruktorze Mecz zaciągasz przynależnych do tej instancji Meczu zawodników. Wyświetlanie tego to juz bajka.

Ten post edytował piotras 11.04.2016, 13:39:46
Go to the top of the page
+Quote Post
Zdziho
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 3.04.2016

Ostrzeżenie: (0%)
-----


Troche nie wiem co miałbym trzymać w tabeli mecze_zawodnicy? W tabeli mecze mam chyba wszystko co mi jest potrzebne do ogarniecia: id zawodnikow ktorzy ze soba grali, wynik, punkty.
Chciałbym tylko jakoś uzupełnić sobie wynik zapytania o pozostałe kombinacje meczy.

Przykładowo dla 3 zawodników, gdzie został rozegrany 1 mecz, dostane dwa wiersze (np. id1 vs id3):
1 vs 3
3 vs 1

A chciałbym:
1 vs 2 (nie było meczu)
1 vs 3 (byl -> wynik zapytania)
2 vs 1 ( nie było meczu)
2 vs 3 (nie było)
3 vs 1 (byl - wynik zapytania)
3 vs 2 ( nie było)

btw nie mam tego w OOP
Go to the top of the page
+Quote Post
maryaan
post
Post #4





Grupa: Zarejestrowani
Postów: 380
Pomógł: 2
Dołączył: 5.01.2007

Ostrzeżenie: (0%)
-----


Cytat(Zdziho @ 12.04.2016, 14:20:11 ) *
Przykładowo dla 3 zawodników, gdzie został rozegrany 1 mecz, dostane dwa wiersze (np. id1 vs id3):
1 vs 3
3 vs 1
Po co podwajasz wszystkie dane? Jeśli był mecz 1 vs 2 to wiadomo że był też mecz 2 vs 1 z "lustrzanym" wynikiem i nie ma żadnego sensu dublowanie tych danych w bazie i tylko zaciemnia obraz tego co chcesz zrobić.

Cytat
A chciałbym:
1 vs 2 (nie było meczu)
1 vs 3 (byl -> wynik zapytania)
2 vs 1 ( nie było meczu)
2 vs 3 (nie było)
3 vs 1 (byl - wynik zapytania)
3 vs 2 ( nie było)
Generuj grafik spotkań i dodaj sobie marker określający czy dany mecz już był.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.09.2025 - 00:38