Grundet overforbrug af koffein tænker jeg vist ikke længere klart - det er der forhåbentlig én af jer der gør.
Sagen er den, at jeg i en tabel - drink_drink - har en række drinks. I en anden tabel har jeg relationsdata til nogle ingredienser. Denne tabel hedder drink_ingredient_relation.
Tabellerne er opbygget som følger (unødvendige felter skåret fra):
drink_ingredient_relation ----------------------- drink_id (henviser til hvilken drink denne relation gælder for) ingredient_id (henviser til id'et på ingrediensen) ingredient_essential (henviser til om ingrediensen er 100% nødvendig for at lave drinken)
Jeg har nu en website hvorpå man skal kunne afkrydse hvilke ingredienser man har i sit barskab og herefter skal systemet vise de drinks, hvor alle dens rækker i drink_ingredient_relation med ingredient_essential er lig 1.
Eksempel:
Søger efter drinks hvor ingredienserne 1, 4 og 5 indgår som eneste ingredienser i drinken. Her skal også drinks hvor f.eks. kun 1 eller 1 og 4 findes.
Hvordan grejer jeg den?
En løsning jeg har forsøgt er at lave en GROUP BY drink_id - men da jeg ikke kan bruge GROUP_CONCAT() kan jeg ikke finde ud af hvilke ingredienser der er nødvendige til drinken.
select * from drink_drink, drink_ingredient_relation left join drink_ingredient_relation As t2 on drink_drink.drink_id = t2.drink_id AND t2.ingredient_essential = 1
Ja- lidt i den retning har jeg også været. Jeg har fået løst problemet med følgende SQL-sætning:
SELECT drink_drink.drink_id, drink_ingredient_relation, COUNT(DISTINCT r2.ingredient_id) AS count_drink_ingredients, COUNT(DISTINCT drink_ingredient_relation.ingredient_id) AS count_search_ingredients FROM drink_ingredient_relation LEFT JOIN drink_drink ON drink_drink.drink_id = drink_ingredient_relation.drink_id LEFT JOIN drink_ingredient_relation AS r2 ON r2.drink_id = drink_drink.drink_id AND r2.ingredient_essential = 1 WHERE drink_ingredient_relation.ingredient_id = 1 OR drink_ingredient_relation.ingredient_id = 4 GROUP BY r2.drink_id HAVING count_drink_ingredients <= count_search_ingredients
Hvor de ingredienser jeg søger efter puttes i WHERE-sætningen. Hvis det ønskes kan HAVING-delen omformuleres således at den også henter drinks ud hvor der kun mangler én ingrediens.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.