Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rezeptdatenbank, Suche nach Zutaten

Da ein Rezept mehrere Zutaten enthalten kann und Sie nach Rezepten suchen, die eine oder mehrere der angegebenen Zutaten verwenden, sollten Sie den DISTINCT verwenden Schlüsselwort, um doppelte Ergebnisse zu vermeiden, wenn ein Rezept mehr als eine Zutat aus der angegebenen Liste verwendet. Sie können auch IN verwenden -Klausel, um nach mehreren Inhaltsstoff-IDs zu filtern.

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

Alternativ können Sie, wenn Sie nach Rezepten suchen, die alle in der Liste angegebenen Zutaten verwenden, die Ergebnisse nach Rezeptnamen gruppieren und prüfen, ob die Anzahl der Datensätze mit der Anzahl der Zutaten in Ihrer Liste übereinstimmt.

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

Dies setzt voraus, dass es keine doppelten Datensätze mit demselben Tupel (Rezept_ID, Inhaltsstoff_ID) gibt (besser sichergestellt mit einer EINZIGARTIGEN Einschränkung).