Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyszukiwanie rekordów do których są wszystkie dopasowania przy JOIN
peku33
post
Post #1





Grupa: Zarejestrowani
Postów: 65
Pomógł: 5
Dołączył: 22.01.2010

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


Mam takie tabele:

FlagiProduktu:
Flaga | IdProduktu
1 | 1
2 | 1
3 | 1
1 | 2
2 | 2
1 | 3
2 | 3
3 | 3

Produkty
IdProduktu | NazwaProduktu
1 | Olej
2 | Masło
3 | Chleb

Chciałbym teraz wyjąć z bazy wszystkie rekordy, które mają flagi 1 i 2 i 3

W tym wypadku wynikiem powinny być prodkuty 1 i 3 (bo 2 nie ma flagi 3)

Jakim zapytaniem mógłbym uzyskać pożądany wynik?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Podobne: http://forum.php.pl/index.php?s=&showt...st&p=981187


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
peku33
post
Post #3





Grupa: Zarejestrowani
Postów: 65
Pomógł: 5
Dołączył: 22.01.2010

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


Otóż wpadłem na dobre (szybkie i proste) rozwiązanie dla tego problemu.

Wystarczy dla każdego argumentu wyszukiwania wywołać kolejne JOIN z 2 warunkami złączenia (#1 - standardowa zgodność pól, #2 - warunek):

  1. SELECT IdProduktu, NazwaProduktu FROM Produkty AS P
  2. JOIN FlagiProduktu AS F1 ON (F1.IdProduktu = P.IdProduktu AND F1.Flaga = 1)
  3. JOIN FlagiProduktu AS F2 ON (F2.IdProduktu = P.IdProduktu AND F1.Flaga = 2)
  4. JOIN FlagiProduktu AS F3 ON (F3.IdProduktu = P.IdProduktu AND F1.Flaga = 3)


voila!
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. SELECT idProduktu FROM FlagiProduktu GROUP BY 1 HAVING Count(DISTINCT Flaga)=3
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 Aktualny czas: 21.08.2025 - 03:12