Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie wyników z tabeli 1, jeżeli w tabeli ...
Forum PHP.pl > Forum > Bazy danych > MySQL
Eagle
Witam

Potrzebuje pobrać wszystkie wartości z tabeli1, jeżeli tabela2 w polu "dokument" ma wartość 0

Tabela1
Kod
id | data | user | inne pola ...
1  | 2010 | 1234 | ...
2  | 2011 | 3456 | ...


Tabela2
Kod
id | dokument | inne pola ...
1  | 0 | ...
2  | 1 | ...


Zapytanie wyprodukowałem takie:

  1. SELECT `t1`.* FROM `tabela1` AS `t1`
  2. LEFT JOIN `tabela2` AS `t2`
  3. ON 1
  4. WHERE (t2.dokument = 0)


Dla przykładowych danych zwraca mi oba wyniki (z tabeli 1 [powinno zwrócić tylko pozycję 2]).
Potrzebuję też wziąć pod uwagę przypadek, kiedy tabela2 jest pusta.

Z góry dzięki
Mchl
A jaka jest relacja między tymi tabelami? Bo na razie robisz iloczyn kartezjański wszystkich wierszy z obu tabel.

Eagle
Pole "dokument" z tabeli2 wskazuje na pole "id" z tabeli1
eccocce
i chcesz pobrać tylko te wiersze, w których dokument = 0?
Eagle
Tak (lub wszystkie pozycje z tabeli1, jeżeli tabela2 jest pusta)
jajcarzd1
No a coś takiego nie działa ?

  1.  
  2. SELECT t1.* FROM tabela1 AS t1
  3. LEFT JOIN tabela2 AS t2
  4. ON t1.id = t2.dokument
  5. WHERE (t2.dokument = 0)
  6.  
Eagle
Niestety nie sad.gif
eccocce
Chcesz pobrać tylko te wiersze, gdzie dokument = 0, więc dlaczego piszesz, że powinno z przykładowych danych zwrócić wiersz z id=2 (Tabela1) skoro jeśli połączymy Tabela1 i Tabela2 (Tabela1.id = Tabela2.dokument), to dokument nie jest równy 0?

Opisz jeszcze raz dokładniej, co zawierają te tabele i które dane z jednej tabeli są tymi samymi danymi w drugiej tabeli (takie dane umożliwiają zrobienie join'a).
jajcarzd1
Czekaj no jeśli Ty chcesz pobrac tylko te wiersze gdzie dokument ma być 0 i do tego kolumna ta jest kluczem to trzeba to odwrotnie dać. Spróbuj tak

  1.  
  2. SELECT t2.* FROM tabela2 AS t2
  3. LEFT JOIN tabela1 AS t1
  4. ON t2.dokument = t1.id
  5. WHERE (t2.dokument = 0)
  6.  
Mchl
i jeszcze
Kod
OR t2.dokument IS NULL
thek
Mam pytanie... Skoro pole tabela2.dokument wskazuje na pole tabela1.id, to jak Ty chcesz wiedzieć jakie dokumenty to mają być, skoro szukasz tam, gdzie tabela2.dokument = 0? Przecież to bezsens logiczny. Jak ma znaleźć jakikolwiek dokument, skoro tabela 2 nie przechowuje o nim informacji wtedy? Niby gdzie? W tabeli1, w rekordzie o id = 0? Sam tak to ustawiasz i dziwisz się, że nie działa, a przecież nie ma prawa działać. Od kiedy bowiem można łączyć dwie tabele po polu, które według Ciebie z góry ma mieć wtedy zawsze wartość 0 i jeszcze oczekiwać sensownego wyniku?

A może to miało być tak, że w obu tych tabelach pola id odpowiadają sobie (tabela.id oznacza dokument powiązany z tabela2.id)? Jeśli dobrze myślę, to jedynie w zapytaniu zmień:
ON t2.id = t1.id

Co do drugiej części pytania, to chyba najszybciej będzie pchnąć drugie zapytanie uzależnione od liczby wierszy wyniku po stronie php niż robić cuda-wianki w zapytaniu.
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.