Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie - JOIN czy coś...
Rafiki23
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 13.07.2007

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


Witam,

Mam pewien problem... gdyż nie wiem jak mam połączyć zapytania SQL w jedno (obecnie baza mi się strasznie krzaczy z powodu bardzo wielu zapytań) myślałem o JOINie, ale nie mam pomysłu jak go użyć, a jak już jest, to niestety nie idzie...

A więc tak. Mam dwie tabele.

- wyniki
MeczID | SezonID | LigaID | MeczData | GospodarzID | GoscID | BramkiGospodarz | BramkiGosc

- bramki
ID | MeczID | LigaID | SezonID | Pilkarz | DruzynaID | Minuta

Teraz robiłem to tak :
Pobierałem wyniki z jakiegoś zakresu dat w danej lidze, później jak wyświetlałem wierszami wyniki, to robiłem zapytanie WHERE MeczID = '$mecz' AND DruzynaID = '$data[GospodarzID]' i wyświetlałem strzelców goli gospodarzy.
To samo robiłem dla gosci. Czyli do jednego meczu robiłem dodatkowo 2 zapytania... :/ A jak meczów było np na stronie 10, to robiłem 20 zapytań + zapytanie o wyniki.

Dlatego mam pytanie o pomoc... jak to zapytanie skonstruować i czy jest taka możliwość, żeby zrobić to w jednym zapytaniu i dopiero jakoś to w skrypcie poukładać ?

Z góry dziękuję za pomoc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Rafiki23 8.09.2008, 22:53:02
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Nie wiem czy dobrze zrozumiałam co chcesz zrobić, więc odpowiadam trochę po omacku.

Zapytanie:

  1. SELECT *
  2. FROM wyniki w
  3. LEFT JOIN bramki b ON w.MeczID = b.MeczID
  4. WHERE (MeczData BETWEEN data_od AND data_do) AND LigaID=coś


w miejsce gwiazdki musisz wpisać pola z obu tabel które chcesz pobrać

W ten sposób możesz pobrać wszystkie bramki dla każdego meczy meczu a warunek WHERE ogranicza ci mecze do wybranego przedziału czasowego i ligi.

W ten sposób dla każdego meczy dostaniesz tyle rekordów ile było bramek. masz zdublowane info o meczach na przykład jeśli w miejsce * wpiszesz:
w.MeczID,w.MeczData,w.GospodarzID,w.GoscID,w.BramkiGospodarz, w.BramkiGosc, b.Pilkarz, b.DruzynaID,b.Minuta

Dostaniesz coś w tym stylu

15 2008-04-12 druzynaA druzynaB 0 3 Kowalski druzynaB 9:12
15 2008-04-12 druzynaA druzynaB 0 3 Kowalski druzynaB 20:05
15 2008-04-12 druzynaA druzynaB 0 3 Nowak druzynaB 52:23
27 2008-04-13 druzynaC druzynaD 1 1 Mazurek druzynaC 16:49
27 2008-04-13 druzynaC druzynaD 1 1 Bal druzynaD 49:17

i tak dalej

Przeczesując rekordy pętlą możesz sobie ładnie te dane zapakować w jakieś tablice i potem nimi zarządzać.

Jedna uwaga. Zupełnie niepotrzebnie (moim zdaniem) masz zdublowane w tabeli bramki takie pola jak LigaID | SezonID
Wystarczy pole MeczID, które jednoznacznie łączy dany rekord z rekordem w tabeli wyniki gdzie te dane już są. Poczytaj trochę o redundancji danych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował JoShiMa 9.09.2008, 09:53:31
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 02:34