2011-01-05 5 views
0

Dies scheint, wie es einfach sein würde, aber aus irgendeinem Grund kann ich nicht bekommen, dies zu tun, was ich will ...für mehrere Kriterien in einer verknüpften Tabelle Suche

ich ein Rezept Website und ich sein will in der Lage, Rezepte basierend darauf zu durchsuchen, ob sie mehrere Zutaten enthalten. Ich habe zwei Tische mit allen Rezeptinformationen und eine zweite Tabelle mit den Zutaten. Dies ist, was ich bisher habe, aber es ruft keine Aufzeichnungen ab. Jede Hilfe wäre willkommen. Vielen Dank!

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 "relationale Abteilung". – onedaywhen

Antwort

1

Sie erhalten keine Ergebnisse, da die AND in Ihrer WHERE Klausel es eine unmögliche Bedingung macht, da Sie nicht eine Zeile haben wird, wo die Beschreibung all diese Werte gleichzeitig.

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; 

Wenn Sie die Rezepte mit mehreren Zutaten betrachten möchten, sollte das den Trick machen. Andernfalls, wenn Sie die Anzahl der Zutaten für jedes Rezept wünschen, nehmen Sie die Unterabfrage.

0

Es scheint, dass Ihre Tabelle ingredientRecipe_ID enthält. Das macht diese Abfrage wirklich ziemlich einfach, da Sie nur sehen müssen, welche Recipe_ID in mehr als einer Zeile passieren.

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

wird die IDs für alle solche Rezepte geben. wenn Sie mehr wollen als nur die ID finden Sie eine

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 

beitreten müssen würde ich dringend empfehlen, eine many-to-many Blick in die Tabelle, die Sie so etwas wie recipe_to_ingredient nennen würde. So können Sie eine Tabelle haben recipe, ein Tisch ingredient und eine Tabelle recipe_to_ingredient die recipe_id/ingredient_id Paare haben (und beträgt vielleicht?)

2

Wenn Sie alle Rezepte möchten, die mindestens diese drei Zutaten haben, dann versuchen:

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

Das hat geklappt. Vielen Dank, dass Sie sich die Zeit genommen haben, zu antworten! –

+0

@ Jon: Großartig. Sie können diese Antwort akzeptieren, indem Sie das Kontrollkästchen daneben aktivieren. – Gerrat

Verwandte Themen