Aktywne Wpisy

yam_yeti +58
Treść przeznaczona dla osób powyżej 18 roku życia...

ibleedforyou +242
smalce alfa dbajom o swoje bezpieczeństwo
źródło: Zdjęcie z biblioteki
PobierzSkopiuj link
Skopiuj link

źródło: Zdjęcie z biblioteki
PobierzRegulamin
Reklama
Kontakt
O nas
FAQ
Osiągnięcia
Ranking
mam taką zagwostkę z SQL:
1. Mamy dwie tabele: Orders i Products
2. Tabela Orders ma kolumny:
id (autoincrement) / orderid / productid
3. Tabela Products ma kolumny:
id / name
4. W tabeli Orders zapisywane są zamówienia, gdzie każdy produkt w zamówieniu tworzy nowy rekord np. widok tabeli Orders:
1 / 1 / 10
2 / 1 / 15
3 / 1 / 17
4 / 2 / 5
5 / 2 / 7
....itd.
(productid ma oczywiście relacje do id w tabeli Products)
5. W tabeli Products może być n produktów, także zamówienie może składać się z n produktów, co stworzy n rekordów w tabeli Orders
6. Niestety nie ma opcji zmiany tego i taka logika na bazie musi zostać.
I teraz problem - jak stworzyć jedno uniwersalne zapytanie SQL, które pokaże zamówienia zawierające product X oraz Y oraz Z.
Zamówienie musi zawierać wszystkie wybrane w filtrze produkty, czyli jak ktoś wybierze 5 produktów to wyfiltruje tylko zamówienia gdzie wszystkie z tych 5 produktów były. Z filtra wpada tablica zawierająca 5 różnych productid.
Może rozwiązanie jest banalne, ale mam mindfuck.
#sql #programowanie
Tak pobieznie przeczytalem i ma to sens co proponuje, zobacz czy spelnia twoje wymagania.
SELECT a.order_id, count(a.id) as 'ile_produktów_z_wybranych' FROM(SELECT * FROM Orders WHERE product_id in (1,2,3) ) as a
GROUP BY a.order_id
HAVING count(a.id) = 3
@kaziuwichura: @lento01 założyłem, że productID jest nieunikalne
a PK to id