Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] JOIN + Kilka WHERE
Forum PHP.pl > Forum > Bazy danych > MySQL
bialyk
Witam,
Natknąłem się na pewien problem, spowodowany prawdopodobnie brakiem wiedzy.
A mianowicie,
Mam dwie tabele

1. tabela_1
--id int(10) us ai
--nazwa

2. tabela_2 (atrybut)
-- table_1_id int(10) us FK tabela_1 id
-- attribute_id tinyint(2) us FK tabela_attribute attr_id

Chodzi mi o skonstruowanie takiego zapytania które będzie wyciągało wszystkie obiekty z tabeli tabela_1 posiadające atrybuty konkretne atrybuty czyli:

Tabela 1
id nazwa
1 obiekt_1
2 obiekt_2
3 obiekt_3

tabela_2
table_1_id attribute_id
1 1
1 2
2 1
3 2

I chciałbym wyciągnąć obiekt(y), które w powyższym przypadku posiadają atrybut 1 oraz 2.
Dodając po joinie where niestety nie zwraca żadnych wyników.
Ma ktoś pomysł, bądź spotkał się z takim problemem kiedyś ?
Nie chce wyników "obrabiać" w pehapie bo od tego jest baza.
Z góry dziękuje za pomoc.
lord2105
  1. SELECT tabela_1.id,tabela_1.nazwa,tabela_2.table_1_id,table_2.attribute_id FROM tabela_1,tabela_2 WHERE table_2.attribute_id = tabela_1.id


Nie wiem czy dobrze cię zrozumiełem tongue.gif
Pisane z palca...
bialyk
Chodziło mi bardziej o coś takiego. W sumie od razu powinienem napisać

  1. SELECT * FROM tabela_1 LEFT JOIN tabela_2 ON (tabela_1.id= tabela_2.table_1_id) WHERE (tabela_2.attribute_id = 1 AND tabela_2.attribute_id = 2) GROUP BY (tabela_1.id)


Zdaję sobie sprawę, że to zapytanie jest błędne, ale obrazuje ono (chyba o co mi chodzi, pisane z palca), Chce teraz żeby wyciągnięty został, tylko obiekt z tabeli jeden który posiada obydwa atrybuty, niestety nic nie zwraca, problem wydaję mi się że jest z ANDem, ale nie mam pojęcia jak to zapytanie skonstruować, dużo googlewałem zanim zapytałem, niestety odpowiedzi nie znalazłem :/
netmare
  1. SELECT * FROM tabela_1
  2. LEFT JOIN tabela_2 AS t1 ON (tabela_1.id= t1.table_1_id AND t1.atribute_id =1 )
  3. LEFT JOIN tabela_2 AS t2 ON (tabela_1.id= t2.table_1_id AND t1.atribute_id =2 )
  4. WHERE t1.id IS NOT NULL AND t2.id IS NOT NULL


Pisane z palca...
bialyk
Problem rozwiązałem w trochę korzystniejszy dla oka i działania bazy sposób.
Ponieważ dodawanie kilku joinów jednej tabeli wydało mi się trochę bez sensu, ale i tak dziękuje za pomoc.
Dla potomnych, jakby komuś przydarzył się podobny problem, poniżej przedstawiam moje rozwiązanie.

  1. SELECT * FROM `tablela_1` LEFT JOIN `tabela_2 ` ON tabela_2 .table_1_id.=tabela_1.id WHERE ( tabela_2 .atribute_id='1' OR tabela_2.atribute_id='2' ) GROUP BY `tabela_1.id` HAVING (count(tabela_1.id)=2)
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.