Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] pobranie danych z trzech tabel, jak to zrobić ?
Forum PHP.pl > Forum > Bazy danych > MySQL
ostrylg
Mam 3 tabele, gallery, gallery_lang oraz gallery_page.

gallery

id | position

1 | 1

gallery_lang

gallery_id | lang_id | name | description

1 | 1 | galeria | opis galerii
1 | 2 | galeria en | opis galerii en
2| 1 | galeria 2| opis galerii 2

gallery_page

gallery_id | page_id

1 | 1

Teraz chciałbym zeby mi pobrało jeden wszystkie wiersze gdzie z trzech tabel gdzie np. page_id = 1 i lang_id = 1, czyli wiersze powinien wygladac mniej wiecej tak

id = 1, gallery_id = 1, name = galeria, description = opis galerii
id = 2, gallery_id =2, name = galeria 2, description = opis galerii 2

Męcze się już trochę z tym, zrobiłem coś takiego

  1. SELECT gp.id_page, gp.id_gallery, gl.name
  2. FROM gallery AS g
  3. LEFT JOIN gallery_page AS gp ON g.id = gp.page_id
  4. LEFT JOIN gallery_lang AS gl ON gl.gallery_id = g.id && gl.lang_id = $id_lang
  5. WHERE g.id = $id_page


ale niestety nie śmiga, macie jakieś pomysły ?

Pozdrawiam.
piotr.pasich
A jaki komunikat zwraca ? Trzeba czytać komunikaty - nazwy nie są zachowane.

Nazwy kolumn w tabelach są gallery_id, page_id , a w zapytaniu jest id_page i id_gallery

Więc powinno być

  1. SELECT gp.page_id, gp.gallery_id, gl.name
  2. FROM gallery AS g
  3. LEFT JOIN gallery_page AS gp ON g.id = gp.page_id
  4. LEFT JOIN gallery_lang AS gl ON gl.gallery_id = g.id && gl.lang_id = $id_lang
  5. WHERE g.id = $id_page
  6.  


Jednak uważam że dużo lepiej ze względów wydajnościowych będzie z joinami zamiast leftów. Jednak nie wiem czy nie zakłóci to logiki aplikacji:

  1. SELECT gp.page_id, gp.gallery_id, gl.name
  2. FROM gallery AS g
  3. JOIN gallery_page AS gp ON g.id = gp.page_id
  4. JOIN gallery_lang AS gl ON gl.gallery_id = g.id && gl.lang_id = $id_lang
  5. WHERE g.id = $id_page
  6.  

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.