2011-01-05 16 views
0

これは簡単なことだろうように思えるが、何らかの理由で私は 結合テーブルに複数の条件の検索

私はレシピのウェブサイトを持っている...これは私がやりたいことを得ることができないと私はなりたいです複数の食材が含まれているかどうかに基づいてレシピを検索することができます。私はすべてのレシピ情報を持つ2つのテーブルと、その成分を持つ第2のテーブルを持っています。これは私がこれまで持っていたものですが、レコードを取得しません。どんな助けもありがとう。ありがとう!あなたの WHERE句の ANDが不可能状態になるので、説明はすべてのそれらの値を同時に ここであなたは1行を持っていないので

SELECT recipe.ID, recipe.Title, recipe.Photo FROM ingredient 
LEFT JOIN recipe ON ingredient.Recipe_ID = recipe.ID 
WHERE (ingredient.Description = 'egg' AND ingredient.Description = 'sugar' AND ingredient.Description = 'salt') 
GROUP BY recipe.ID 
+0

Google "リレーショナル部門" – onedaywhen

答えて

1

あなたは、何の結果を得るされていません。

0
select recipe.ID, recipe.Title, recipe.Photo 
from(
    select recipe.ID, recipe.Title, recipe.Photo 
    ,count(ingredient.description) as num_ingredients 
    from ingredient left join recipe 
    on ingredient.recipe_id=recipe.ID 
    group by 1,2,3 
    )ingred_count 
where num_ingredients>=2; 

複数の成分を含むレシピを見たい場合は、そのトリックを行う必要があります。それ以外の場合は、各レシピの原料数が必要な場合は、サブクエリを使用します。

0

ingredientテーブルにはRecipe_IDが含まれているようです。実際にこのクエリは非常に簡単になります。なぜなら、あなたがする必要があるのは、複数の行でどちらが起きているのかを見ることだけです。

SELECT I.recipe_id 
FROM ingredient I 
WHERE COUNT(I.description) > 0 
GROUP BY I.recipe_id 

は、すべてのそのようなレシピのIDを提供します。あなただけのIDよりも多くしたい場合は、参加

SELECT R.* 
FROM ingredient I 
INNER JOIN recipe R on I.recipe_id = R.id 
WHERE COUNT(I.description) > 0 
GROUP BY I.recipe_id 

をする必要があります私は強くあなたがrecipe_to_ingredientのようなものに名前を付けるだろう多対多のテーブルに見てお勧めします。/ingredient_idペアをrecipe_idていますあなたがテーブルrecipeを持ってそのように、テーブルingredientとテーブルrecipe_to_ingredient(多分とは量?)

2

あなたは、少なくともこれらの3つの成分を持つすべてのレシピをしたい場合は、試してみてください。

SELECT recipe.ID, recipe.Title, recipe.Photo FROM recipe 
WHERE recipe.ID in (
    SELECT Recipe_ID 
    FROM ingredient 
    WHERE ingredient.Description in ('egg', 'sugar', 'salt') 
    HAVING count(distinct ingredient.Description) = 3 
    GROUP BY Recipe_ID 
) 
+0

これはうまくいった。答える時間をとってくれてありがとう! –

+0

@ジョン:素晴らしい。この答えは、その隣にあるチェックボックスをチェックすることで受け入れることができます。 – Gerrat

関連する問題