Mysql
 sql >> Base de données >  >> RDS >> Mysql

Base de données de recettes, recherche par ingrédient

Étant donné qu'une recette peut utiliser plusieurs ingrédients et que vous recherchez des recettes qui utilisent un ou plusieurs des ingrédients spécifiés, vous devez utiliser le DISTINCT mot clé pour éviter les résultats en double lorsqu'une recette utilise plus d'un ingrédient de la liste spécifiée. Vous pouvez également utiliser IN clause pour filtrer sur plusieurs ID d'ingrédients.

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);

Alternativement, si vous recherchez des recettes qui utilisent tous les ingrédients spécifiés dans la liste, vous pouvez regrouper les résultats par nom de recette et vérifier si le nombre d'enregistrements est le même que le nombre d'ingrédients dans votre liste.

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

Cela suppose qu'il n'y aura pas d'enregistrements en double avec le même tuple (recette_id, ingrédient_id) (mieux assuré avec une contrainte UNIQUE).