Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Podwójne połączenie dwóch tabel
Forum PHP.pl > Forum > Przedszkole
muaddib
Witam. Proszę o pomoc w nastepującym problemie.

Istnieją sobie dwie tabele w MySql:




Wyobraźmy sobie sytuacje, że tabela TEMP ma służyć jako swoisty terminarz meczy pomiędzy drużynami z tabeli TEAMS.

I tak np w TEMP w rekordzie pierwszym w kolumnie A będzie przechowywane ID drużyny z tabeli TEAMS , podobnie w kolumnie B będzie przechowywane ID drużyny z tabeli TEAMS. Taki rekord da nam parę drużyn grających w pierwszej kolejce ligi itp.

Problem pojawia się gdy tworzę zapytanie MySQL

  1. SELECT * FROM temp, teams WHERE a = teams.id


Takie zapytanie nie da satysfakcjonującego wyniku, gdyż będzie brakować kolumn powiązanych z drużyną B.
Logicznym rozwiązaniem wydaje się napisać:

  1. SELECT * FROM temp, teams WHERE a = teams.id AND b = teams.id


lecz to powoduje pusty wynik.

Wytłumaczcie mi prosze jak mogę uzyskać wynik zawierający w jednym wierszu kolumny jednej i drugiej druzyny.


john_doe
musisz zaaliasować tabele i powinno zadziałać

  1.  
  2. SELECT * FROM temp t JOIN teams teamA ON t.a = teamA.id
  3.  
  4. JOIN teams teamB ON t.b = teamB.id
  5.  
  6.  


coś a`la smile.gif
muaddib
Dziękuję bardzo. Zadziałało, jednakże mam jeszcze jedno pytanie, jak w przypadku tego zapytania mogę odróżnić od siebie kolumny np. NAME jednej drużyny od kolumny NAME drugiej drużyny? W wyniku obydwie mają tą samą nazwę. Aby zaaliasować kolumny musiałbym wypisywac je zamiast "*" jednak czy to zadziałą skoro jedna tabela łączona jest dwa razy? Potrzebne mi to będzie do odebrania wartości w PHP.
john_doe
posłuż się właśnie aliasem

  1. SELECT teamA.name, teamB.name ................
muaddib
Dzięki. Rzadko używam JOINOW bo kiedyś były z nimi problemy i tak mi się utarło, a to okazuje się proste wink.gif

Gdyby ktoś potrzebował to tu kod działającego zapytania:

  1. SELECT t.id, t.a, t.b, teamA.id AS idA, teamA.name AS nameA, teamA.sname AS snameA, teamB.id AS idB, teamB.name AS nameB, teamB.sname AS snameB
  2. FROM temp t
  3. JOIN druzyny teamA ON t.a = teamA.id
  4. JOIN druzyny teamB ON t.b = teamB.id


Dziekuje za pomoc john_doe
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.