2017-07-28 11 views
0

私は作成したレシピを保存できますが、データベースに問題があります。私は3つのテーブル、レシピ、食材、ベースラインテーブルを持っています。すべての結果と一致するピボットテーブルからレコードを取得する

Recipe Table 
ID int 
name varchar 
steps varchar 

BaseIngredients Table 
ID int 
name varchar 

Ingredients Table 
ID int 
baseID int 
recipeID int 
measurement varchar 

だから、毎回私はそれがこのbaseingredientのIDを使用してのレコードを埋めた場合、私は、その中の成分を求め、そしてそれが基本食材テーブルに存在するかどうかを確認していますレシピに入力してください成分テーブル。

私の問題は、レシピを探す際に、私が冷蔵庫に入れている食材を検索できることです。だから私が卵とパンを打つと、それは卵のサンドイッチを思いつきます。しかし、使用するクエリでは、それは卵を持っているすべてのレシピを見つけ出し、それを返すので、例えばケーキやパンケーキを見つけることができます。検索パラメータとしてリストアップした成分のみを含むレシピがすべて表示されるように、どのように制限することができますか?

select recipes.id, recipes.name from recipes inner join ingredients on recipes.id = ingredients.recipeID inner join baseingredient on ingredients.baseID = baseingredient.id where baseingredient.name = 'Eggs' 

答えて

1
select r.id 
     ,r.name 
from recipes r 
where exists (select * 
       from ingredients i1 
       inner join baseIngredients b1 
       on i1.id=b1.baseId 
       where i1.recipeID = r.id 
       and b1.name = 'ingredient_1' 
      ) 
    ... 
    and exists (select * 
       from ingredients iN 
       inner join baseIngredients bN 
       on iN.id=bN.baseId 
       where iN.recipeID = r.id 
       and bN.name = 'ingredient_N' 
      ) 

EDIT:上記のクエリは、成分あなたが指定したものが含まれるリストのすべてのレシピを返します。私はあなたの質問を誤解して何がしたいことは実際には他の成分、指定したものよりを使用していないだけのレシピであれば、これを試してください:

ingredient_1ingredient_2などは明らかにあなたが入力したものに置き換える必要があり
select r.id 
     ,r.name 
from recipes r 
where not exists (select * 
        from ingredients i 
        inner join baseIngredients b 
        on i.id=b.baseId 
        where i.recipeID = r.id 
        and b.name not in ('ingredient_1', 'ingredient_2', ..., 'ingredient_N') 

あなたの検索で。

+0

私は実際にどのように動作するのかわかりません。データベースでもこのクエリを試してみましたが、何もしていないようです。たぶんそれを正しく理解していないかもしれない。私が与えた例では、卵と小麦粉を含むレシピの原料として卵をタイプした場合、実際に小麦粉があると指定していないのにこの結果が返ってくるでしょう。 – bob565

+0

ok私は正しいことを理解していると思います。私が正しいかどうか教えてください。あなたが指定した成分だけ**を含むレシピを返そうと思いますか?したがって、_eggs_と_flower_を入力すると、2つの成分以外の成分を含むレシピは見たくないのですか? サイド質問:_eggs_、_flower_、_butter_を入力すると、_eggs_と_flower_のみを含むレシピを返信しますか? – user2877959

+0

はい、それは正しいので、卵だけを入力すると、卵以外のものを含む結果は見たくないのです。小麦粉は私がそれらの2つの成分を持っているのでうまくいくので、レシピを作ることができる – bob565

関連する問題