如何选择一个具有两个不同属性的coloumn的行?

dha*_*gan 5 php mysql sql codeigniter

我正在做一个关于使用PHP(使用Codeigniter)和MYSQL烹饪食谱的项目.

我有三张桌子:

  • Ingredients- id,name.
  • Recipe- id,name
  • ing_to_rep- recipe_id,ingredient_id(我用这个表来保存哪种食谱有哪些成分.)

什么是"得到所有有蛋(id = 64)和盐(id = 65)的食谱"的查询

我试过了:

SELECT * FROM recipe JOIN ing_to_rep ON recipe.id = ing_to_rep.rep_id 
WHERE ing_to_rep.ing_id = 64 AND ing_to_rep.ing_id = 65
Run Code Online (Sandbox Code Playgroud)

当然,它什么都不返回,但它可以帮助你获得我想要做的事情.

Mic*_*ski 1

可能有一种更有效的方法和更灵活的方法,但是两个子查询连接就可以了:

SELECT
  recipe.*
FROM recipe
  JOIN (SELECT recipe_id FROM ing_to_rep WHERE ingredient_id = 64) AS ing1 ON recipe.id = ing1.recipe_id
  JOIN (SELECT recipe_id FROM ing_to_rep WHERE ingredient_id = 65) AS ing2 ON recipe.id = ing2.recipe_id
Run Code Online (Sandbox Code Playgroud)

也可以用EXISTS

SELECT 
  recipe.*
FROM 
  recipe
WHERE
  EXISTS (SELECT recipe_id FROM ing_to_rep ing1 WHERE ingredient_id = 64 AND recipe.id = ing1.recipe_id)
  AND  EXISTS (SELECT recipe_id FROM ing_to_rep ing2 WHERE ingredient_id = 65 AND recipe.id = ing2.recipe_id)
Run Code Online (Sandbox Code Playgroud)