Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jedno zapytanie i trzy tabele
Forum PHP.pl > Forum > Bazy danych > MySQL
tomekmvr
Witam

Mam trzy tabele:

tabela1
id | wiadomosc

tabela2
id2 | id2_tabela1 | nazwa

tabela3
id3 | id3_tabela1 | wartosc

Chcialbym wyciagnac wszystkie wartosci jednym zapytanie dla tabela3 gdy wartosc = 1, i nastepnie wszystkie wartosci dla tabela1 gdy id3_tabela1 = id i wszystkie wartosci gdy id3_tabela1 = id ale tylko wtedy gdy nazwa = 1.

Zrobilem cos takiego:
  1. $sql = 'SELECT * FROM tabela3 LEFT JOIN tabela1 ON tabela3.id3_tabela1 = tabela1.id
  2. LEFT JOIN tabela2 ON tabela3.id3_tabela1 = tabela2.id2_tabela1
  3. WHERE wartosc = '1' '


Nie wiem jak dopisac zeby wyciagalo wartosci z tabela2 gdy nazwa = 1
Prosze o pomoc.
JoShiMa
Nie wiem czy dobrze zrozumiałam. Może tak:

  1. $sql = "SELECT * FROM tabela3 LEFT JOIN tabela1 ON tabela3.id3_tabela1 = tabela1.id
  2. LEFT JOIN tabela2 ON tabela3.id3_tabela1 = tabela2.id2_tabela1
  3. WHERE wartosc = '1' AND nazwa = '1' "
tomekmvr
Ten sposob nie dziala.

Sprobuje to jakos wytlumaczyc.

Chcialbym pobrac wartosci z tabela3 gdy wartosc =1 i odrazu podlaczyc do tej tabeli wartosci z tabela2 gdy tabela3.id3_tabela1 = tabela1.id i do tych dwuch tabel jeszcze podlaczyc tabele2 gdzie tabela3.id3_tabela1 = tabela2.id2_tabela1 ale tylko wtedy gdy nazwa = 1 dla tej tabela2, a jak nazwa nie bedzie rowna 1 to zeby pobralo tylko wartosci dla tych tabela3 i tabela1.
JoShiMa
to może tak:
  1. SELECT * FROM tabela3 LEFT JOIN tabela1 ON tabela3.id3_tabela1 = tabela1.id
  2. LEFT JOIN tabela2 ON tabela3.id3_tabela1 = tabela2.id2_tabela1
  3. WHERE wartosc = '1' AND nazwa != '1'
  4. UNION
  5. SELECT * FROM tabela3 LEFT JOIN tabela1 ON tabela3.id3_tabela1 = tabela1.id
  6. LEFT JOIN tabela2 ON tabela3.id3_tabela1 = tabela2.id2_tabela1
  7. WHERE wartosc = '1' AND nazwa = '1'


Tylko zamiast gwiazdek musisz wypisać ręcznie te wartości i w pierwszej części zapytania te pochodzące z trzeciej tabeli zapisać wynulowac w ten sposób: null as id2, nul as id2_tabela1, null as nazwa

Otrzymasz tabelę w której rekordy spełniające warunek nazwa = '1' będą pełne a rekordy nie spełniające tego warunku będą miały null w polach pochodzących z trzeciej tabeli.

Nadal nie wiem, czy o to ci chodził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.