Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Złożone zapytanie SQL
Forum PHP.pl > Forum > Przedszkole
Mefiuu
Witam. Z SQL'em nigdy jakoś specjalnie nie byłem za pan brat. Podczas tworzenia serwisu natrafiłem na problem, nie wiem jak go ugryźć (a raczej jakim łączeniem i w jaki sposócool.gif. Mam 3 tabele, z których chcę wyciągnąć dane. Tabele:

users:
id | name | country | lastlogin | club_id

clubs
id | club_id | name |

halls
id | club_id | name |

Chcę pobrać ze wszystkich trzech tabel dane: users.name, users.country, users.lastlogin, clubs.name, halls.name.

Próbowałem takim oto zapytaniem :

  1.  
  2. $stmt = $this->pdo->prepare("SELECT u.country, u.name, u.lastlogin, h.name, c.name FROM users AS u, halls AS h, clubs AS c WHERE club_id= :club_id LIMIT 1");
  3.  
  4. $stmt->bindValue(':club_id', $id['club_id'], PDO::PARAM_INT);
  5.  
  6. $stmt->execute();
  7.  
  8. $this->info = $stmt->fetch(PDO::FETCH_ASSOC);
  9.  
  10. $stmt->closeCursor();


Zapytanie znalazłem gdzieś w sieci i próbuję dostosować do swoich potrzeb. Sypie mi jednak błąd:

Kod
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'club_id' in where clause is ambiguous' in


Nie bardzo wiem, gdzie leży błąd mojego kodu, prosiłbym przynajmniej o naprowadzenie jakiego typu połączenia szukać. Resztę powinienem znaleźć. Chodzi o to, aby wyciągnąć te dane z 3 tabel, mając wartość club_id (które jest takie samo w każdej tabeli).

Z góry dziękuję, pozdrawiam.
peter13135
Cytat
id | club_id | name |

czym się różni club_id od id ?
Czy kolumna club_id w tabeli users odnosi się do id czy dp club_id ?

Ze struktury danych, którą przedstawiłeś wynika, że może być wiele userów i halls o tym samym numerze club_id (podobnie w przypadku tabeli clubs, ale tu nie wiem czym się różnią pole id od club_id). Czemu więc dajesz limit 1 ? Czy na prawdę zależy Ci na pobraniu tylko jednego usera ?

Wydaje mi się, że LEFT JOIN by się do tego nadał, ale sprecyzuj problem.

Twoje zapytanko nie zadziała, choćby dlatego, że nie sprecyzowałeś z której tabeli ma być club_id.
Mefiuu
Dobrze, to jeszcze raz, po kolei smile.gif

Mam zapisaną w sesji nazwę klubu, w formie tekstu. Pole ID jest to pole inkrementujące się, a pole CLUB_ID jest to pole powiązane z takim samym polem w tabeli USERS.

Kolumna club_id odnosi się do club_id.

Dla każdego club_id jest po jednym wpisie w każdej tabeli.

Założenie było takie:

W tabeli USERS club_id oznacza, który numer otrzymał jego klub. W tabeli CLUBS są dokładne informacje dla tego klubu, ma takie samo club_id. W tabeli HALLS pole club_id również odnosi się do tego klubu, a tam trzymam dokładne informacje na temat budynków klubu.

Mam nadzieję że teraz to nieco lepiej wyjaśniłem.

Nie wiem zatem z jakiej tabeli powinienem dać to club_id, pewnie z users ?
peter13135
  1. SELECT u.*, c.*, h.* FROM clubs c LEFT JOIN users u ON u.club_id = c.club_id LEFT JOIN halls h ON h.club_id = c.club_id WHERE c.club_id = 1234
Mefiuu
No, coś wyszło, tylko muszę przepatrzeć bindowanie, bo coś mi id nie podpina, ale to powinienem rozgryźć. Dziękuję !

P.S. Jaki to typ łączenia na przyszłość ?
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.