2013-01-09 26 views
1

這是我的場景:我有一張桌子,裏面放着食譜,另一張裏面放着與食譜相關的成分(recipe_ingredients)。MySQL在一列中返回多個值的行?

表RECIPE_INGREDIENTS:

ID  RECIPE_ID  INGREDIENT_ID 
1   1    6 
2   2    3 
3   2    4 
在我的情況

,我想返回與用戶推出了一些食材食譜(可以是一個或多個),在這個例子中假設與成分3和4的所有食譜。當我只查詢一種成分時,沒有任何問題,但我不知道如何實現超過一種成分... 感謝所有提前!任何建議,歡迎!

回答

3

這聽起來像你想的:

select RECIPE_ID 
from RECIPE_INGREDIENTS 
where INGREDIENT_ID in (3, 4) 
group by RECIPE_ID 
having count(distinct INGREDIENT_ID) >=2 

SQL Fiddle with Demo

然後,如果你想加入這個給你配方表:

select r.* 
from recipes r 
inner join 
(
    select RECIPE_ID 
    from RECIPE_INGREDIENTS 
    where INGREDIENT_ID in (3, 4) 
    group by RECIPE_ID 
    having count(distinct INGREDIENT_ID) >=2 
) ri 
    on r.RECIPE_ID = ri.RECIPE_ID 
+0

完美的男人!爲我工作:) –

3

假設你有3周表的食譜, ingradients and recipe_ingrediants

SELECT 
    r.*, 
    GROUP_CONCAT(i.ingradients) 
FROM recipes as r 
LEFT JOIN recipe_ingrediants as ri ON ri.recipe_id = r.id 
LEFT JOIN ingrediants as i ON r.id = ri.ingrediant_id 
GROUP BY r.id 
相關問題