Wpis z mikrobloga

Mireczky, możecie pomóc z małym zapytaniem?

Mam bazę danych z przepisami. Zawiera następujące tabele:

przepisy (tutaj jest treśc przepisu)

przepisyskładniki(zawiera dane o tym jaki przepis wymaga jakich składników)

składniki
uzytkownicy (zawiera dane o tym co kto ma w lodówce).

Teraz chciałbym zrobić zapytanie które sprawdzi czy user ma wymagane składniki do danego przepisu.

mam wyciągnięte wszystkie składniki które posiada użytkownik, ale jak daje warunek WHERE id_skladnik IN (tutaj zapytanie wyciagające składniki)

to wyrzuca mi i tak wszystkie przepisy, bo np ktoś ma 1 składnik do przepisu to już ten przepis zostaje wyświetlony.

Gdyby dało się porównać dwa zbiory danych. Tj składniki które wymaga przepis i składniki które ma użytkownik, to byłoby super.

#sql #microsoft #tsql #bazydanych #bazy
  • 8
Jak wyglądają tabele z składnikami? Każdy składnik ma swoją kolumnę? Jest jedna kolumna, gdzie po przecinku są wymieniane składniki?

Bo skoro nie masz oddzielnej tabeli ze skłądnikami to po ID nie łączysz.
@JareqQ: select ps.skladnikID, su.skladnikID from przepisySkladniki ps left join skladnikiUzytkownika su on su.skladnikID = ps.skladnikID and su.userID = USERID where ps.przepisID = PRZEPISID and (su.skladnikID is null or su.ilosc < ps.ilosc);

jeżeli zwróci ci jakieś wiersze, to użytkownik nie ma wszystkich składników (konkretnie: w przepisie występują składniki, które nie mają odpowiedników w 'spiżarni' lub są w ilości mniejszej niż wymagana)
@JareQ:

SELECT p.id, p.nazwa, p.xyz


FROM przepisy AS P JOIN przepisy*składniki AS s ON p.id = s.id*przepisy LEFT JOIN przepisy*uzytkownicy AS u ON s.id*skladnika = u.id*skladnika AND s.ilosc <= u.ilosc


WHERE u.id*uzytkownika = :id*usera AND p.id = :id*przepisy


GROUP BY p.id


HAVING count(s.id) = count(u.id)