Mysql
 sql >> Database >  >> RDS >> Mysql

Database ricette, ricerca per ingrediente

Poiché una ricetta può utilizzare più ingredienti e stai cercando ricette che utilizzano uno o più degli ingredienti specificati, dovresti utilizzare il DISTINCT parola chiave per evitare risultati duplicati in cui una ricetta utilizza più di un ingrediente dall'elenco specificato. Inoltre, puoi utilizzare IN clausola per filtrare su più ID ingrediente.

select DISTINCT r.name
from 
    recipes r
    inner join ingredient_index i
    on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5);

In alternativa, se stai cercando ricette che utilizzano tutti gli ingredienti specificati nell'elenco, puoi raggruppare i risultati per nome della ricetta e verificare se il conteggio dei record è uguale al numero di ingredienti nell'elenco.

select r.name
from 
    recipes r
    inner join ingredient_index i
    on i.recipe_id = r.recipe_id
where i.ingredient_id IN (7, 5)
GROUP BY r.name
HAVING COUNT(*) = 2

Questo presuppone che non ci saranno record duplicati con la stessa tupla (recipe_id, ingredient_id) (meglio assicurata con un vincolo UNIQUE).