SELECT
r.id
FROM
recepts r
JOIN recepts_ingredients ri
ON ri.recept_id = r.id
JOIN ingredients tomaat
ON tomaat.name = 'tomaat' AND tomaat.id = ri.ingredient_id
JOIN ingredients pesto
ON pesto.name = 'pesto' AND pesto.id = ri.ingredient_id
Dank je wel voor je reactie Ben maar het wil nog niet lukken. als ik de query wijzig in
SELECT
r.id, r.name, a.name
FROM
recepts r
JOIN recepts_ingredients ri
ON ri.recept_id = r.id
JOIN ingredients a
ON a.name = 'tomaat' AND a.id = ri.ingredient_id
JOIN ingredients b
ON b.name = 'pesto' AND b.id = ri.ingredient_id
Dan krijg ik een lege resultaatset.
Als ik de laatste JOIN weglaat dan krijg ik alle recepten met het ingredient tomaat.
SELECT
r.id, r.name, a.name
FROM
recepts r
JOIN recepts_ingredients ri1
ON ri1.recept_id = r.id
JOIN recepts_ingredients ri2
ON ri2.recept_id = r.id
JOIN ingredients a
ON a.name = 'tomaat' AND a.id = ri1.ingredient_id
JOIN ingredients b
ON b.name = 'pesto' AND b.id = ri2.ingredient_id
SELECT
r.id,
r.name
FROM
recepts r
JOIN
recepts_ingredients ri
ON r.id = ri.recept_id
JOIN
ingredients i
ON ri.ingredient_id = i.id
WHERE i.name IN ('tomaat', 'pesto')
GROUP BY r.id
HAVING COUNT(*) = 2
Inmiddels dit antwoord gekregen via een engelstalig forum:
SELECT
r.id, r.name, GROUP_CONCAT(DISTINCT(i.name)) as items
FROM
recepts r
LEFT JOIN
recepts_ingredients ri
ON
ri.recept_id = r.id
LEFT JOIN
ingredients i
ON
ri.ingredient_id = i.id
GROUP BY
r.id
HAVING
FIND_IN_SET('tomaat',items) AND FIND_IN_SET('pesto',items)
Mocht er nog een beter of simpeler antwoord zijn dan hou ik me aanbevolen.
[size=xsmall]Toevoeging op 05/10/2015 14:59:40:[/size]
@Ger: Die van jou is korter en doet wat ie moet doen :-) Merci!