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

Opskriftsdatabase, søg efter ingrediens

Da en opskrift kan bruge flere ingredienser, og du leder efter opskrifter, der bruger en eller flere af de angivne ingredienser, bør du bruge DISTINCT søgeord for at forhindre duplikerede resultater, hvor en opskrift bruger mere end én ingrediens fra den angivne liste. Du kan også bruge IN klausul for at filtrere på flere ingrediens-id'er.

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

Alternativt, hvis du leder efter opskrifter, der bruger alle de ingredienser, der er angivet på listen, kan du gruppere resultaterne efter opskriftsnavn og kontrollere, om antallet af registreringer er det samme som antallet af ingredienser på din 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

Dette forudsætter, at der ikke vil være duplikerede poster med samme (recipe_id, ingredient_id) tupel (bedre sikret med en UNIK begrænsning).



  1. Hvordan forbindes med MySQL DB, der kører som container i docker?

  2. Hvordan får man alle værdier i en kolonne ved hjælp af PHP?

  3. Hvordan bruger man en streng-/kolonneværdi som en mysql-datointervalkonstant (DAG, MÅNED...)?

  4. INSERT INTO vs SELECT INTO