1

これが私のシナリオです。レシピを保持するテーブルと、レシピにリンクされた材料を保持するテーブル(recipe_ingredients)があります。

テーブルRECIPE_INGREDIENTS:

ID      RECIPE_ID     INGREDIENT_ID
1           1              6
2           2              3
3           2              4

私の場合、ユーザーが紹介したいくつかの材料(1つ以上の可能性があります)を含むすべてのレシピを返したいと思います。この例では、材料3と4を含むすべてのレシピを考えます。明らかに、1つの材料だけをクエリする場合は問題ありませんが、複数でそれを達成する方法がわかりません...よろしくお願いします!どんなアドバイスも大歓迎です!

4

2 に答える 2

4

これが欲しいようです:

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

デモで SQL Fiddle を参照してください

次に、これをレシピ テーブルに結合する場合:

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
于 2013-01-09T18:47:28.953 に答える
3

3つのテーブルレシピ、ingradients、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
于 2013-01-09T18:48:44.357 に答える