Skocz do zawartości

MySQL - SELECT w relacji jeden do wielu


OriPL

Rekomendowane odpowiedzi

Witam ponownie GMClanowiczów, dawno mnie tu nie było :) ale nie rozpisując się mam pytanie:

 

Mam 2 tabele w MYSQL:

 

KLANY:

CLAN_ID | CLAN_NAME | CLAN_TAG | CLAN_LOGO

 

MECZE:

MATCH_ID | MATCH_CLAN_A | MATCH_CLAN_B | MATCH_START | MATCH_END |

 

I teraz potrzebuje do tego wymyslić zapytanie które wybierze z bazy wszystkie mecze oraz klany które w nich uczestniczną czyli przykładowym wynikiem będzie:

 

Nazwa klanu A, Tag klanu A, Logo klanu A

Nazwa klanu B, Tag klanu B, Logo klanu B

Rozpoczecie meczu, Zakonczenie meczu

 

Połączenie 1 do 1 jest proste ale to jest troche inne... bo chodzi o to że z tabelki MECZE wybieram 1 rekord, a z tabelki KLANY juz 2.

Mam nadzieje ze wystarczająco to opisałem...

 

Moje działania staneły na:

            $matches_query = mysql_query(
            "SELECT 
            schedule_clans.clan_id,
            schedule_clans.clan_name,
            schedule_clans.clan_tag,
            schedule_matches.match_id,
            schedule_matches.match_clan_a,
            schedule_matches.match_clan_b,
            schedule_matches.match_start,
            schedule_matches.match_end 
            FROM schedule_matches 
            LEFT JOIN schedule_clans ON schedule_matches.match_clan_a = schedule_clans.clan_id
            ");

 

Na hardcore oczywiscie mogl bym pobrac te dane a nastpenie je zlaczyc jakos w petli i tez by dzialalo, ale chcial bym to zrobic jakos ladnie :) i przy okazji sie czegos nauczyc :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli w tabeli mecze trzymasz identyfikatory do rekordów, możesz do tego użyć union. Pewnie można i na joinach, ale jeszcze ich dobrze nie znam

Select id, mecz_start, mecz_stop from m.mecze Union select klan, tag from klany where id=m.klan_a union select klan, tag from klany where id=m.klan_b

coś w tym stylu, głowy nie dam że działa

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuje za pomoc, jednak kod który podałeś nie spełniał moich oczekiwań, bo UNION łączy tabele o tych samych nazwach kolumn (musi byc ich tyle samo) co mnie nie pasowalo, drogą eksperymentów i przemyśleń doszedłem do rozwiązania:

 

SELECT 
M.match_id,
M.match_clan_a,
M.match_clan_b,
M.match_start,
M.match_end,
C.clan_id as clan_a_ID,
C.clan_name as clan_a_name,
C.clan_tag as clan_a_tag,
C.clan_logo as clan_a_logo,
CC.clan_id as clan_b_id,
CC.clan_name as clan_b_name,
CC.clan_tag as clan_b_tag,
CC.clan_logo as clan_b_logo
FROM schedule_matches M
LEFT JOIN schedule_clans C ON M.match_clan_a = C.clan_id
LEFT JOIN schedule_clans CC ON M.match_clan_b = CC.clan_id

 

Czego wynikiem jest np:

 

array
  'match_id' => string '3' (length=1)
  'match_clan_a' => string '1' (length=1)
  'match_clan_b' => string '2' (length=1)
  'match_start' => string '23423423' (length=8)
  'match_end' => string '34234232' (length=8)
  'clan_a_ID' => string '1' (length=1)
  'clan_a_name' => string 'Klan Name 1' (length=22)
  'clan_a_tag' => string 'Klan Tag 1' (length=11)
  'clan_a_logo' => string '4fa14092c95b7b11c9230c28136c1746.png' (length=36)
  'clan_b_id' => string '2' (length=1)
  'clan_b_name' => string 'Klan Name 2' (length=12)
  'clan_b_tag' => string 'Klan Tag 2' (length=9)
  'clan_b_logo' => string 'f2c9e85b57cc18eafb59a5426fa9689d.jpg' (length=36)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...