Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie wyników z tabeli 1, jeżeli w tabeli ...
Eagle
post 14.06.2010, 21:44:05
Post #1





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Mchl
post 14.06.2010, 22:09:47
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


A jaka jest relacja między tymi tabelami? Bo na razie robisz iloczyn kartezjański wszystkich wierszy z obu tabel.

Go to the top of the page
+Quote Post
Eagle
post 14.06.2010, 22:18:29
Post #3





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


Pole "dokument" z tabeli2 wskazuje na pole "id" z tabeli1
Go to the top of the page
+Quote Post
eccocce
post 14.06.2010, 22:40:23
Post #4





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


i chcesz pobrać tylko te wiersze, w których dokument = 0?
Go to the top of the page
+Quote Post
Eagle
post 14.06.2010, 23:11:06
Post #5





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


Tak (lub wszystkie pozycje z tabeli1, jeżeli tabela2 jest pusta)
Go to the top of the page
+Quote Post
jajcarzd1
post 15.06.2010, 07:29:57
Post #6





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


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.  


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
Eagle
post 15.06.2010, 08:45:02
Post #7





Grupa: Zarejestrowani
Postów: 170
Pomógł: 14
Dołączył: 16.03.2007

Ostrzeżenie: (0%)
-----


Niestety nie sad.gif
Go to the top of the page
+Quote Post
eccocce
post 15.06.2010, 09:11:15
Post #8





Grupa: Zarejestrowani
Postów: 165
Pomógł: 5
Dołączył: 10.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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).
Go to the top of the page
+Quote Post
jajcarzd1
post 15.06.2010, 09:18:00
Post #9





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

Ostrzeżenie: (0%)
-----


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.  


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post
Mchl
post 15.06.2010, 09:29:49
Post #10





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


i jeszcze
Kod
OR t2.dokument IS NULL
Go to the top of the page
+Quote Post
thek
post 15.06.2010, 09:38:36
Post #11





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.07.2025 - 02:19