Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie rekordów do których są wszystkie dopasowania przy JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
peku33
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?
erix
Podobne: http://forum.php.pl/index.php?s=&showt...st&p=981187
peku33
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!
mmmmmmm
  1. SELECT idProduktu FROM FlagiProduktu GROUP BY 1 HAVING Count(DISTINCT Flaga)=3
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.