2017-05-21 4 views
1

Ich habe Probleme beim Schreiben von Abfragen für meine Datenbank. Ich habe hier eine Reihe ähnlicher Beispiele gefunden und habe versucht, sie stundenlang um meinen Kopf zu bekommen, aber keines der Beispiele half mir herauszufinden, wie ich das gewünschte Ergebnis erzielen kann. Ich baue eine Rezept-App, aber ich bin wirklich neu in allem, was Datenbanken betrifft.
Ich möchte 1 oder mehr Zutaten holen und Rezept Titel, und wenn möglich, sortiert nach besten Ergebnis (Rezept, das die meisten Zutaten enthält) erhalten passend. Ich habe versucht, eine innere Verbindung herzustellen, wo ich versuche, Rezeptnamen zusammen mit passenden Zutaten zu bekommen.Suche Rezept nach Zutaten Name, und sortieren, wenn möglich

Und ich habe versucht zu tun, was diese Person in dieser Frage tut, weil wir das gleiche Design haben: Recipe Database, search by ingredient

Aber selbst wenn ich versuche, das zu tun kommen, wie er/sie es tut, nur um zu testen (und nicht, wie ich möchte es) es i erhalten:

ERROR: missing FROM-clause entry for table 

Hier sind meine Tabellen:

Recipe_Ingredient

+-----------+---------------+ 
| recipe_id | ingredient_id | 
+-----------+---------------+ 
|   1 |    1 | 
|   1 |    2 | 
|   1 |    3 | 
|   1 |    4 | 
|   1 |    5 | 
|   1 |    6 | 
|   1 |    7 | 
|   2 |    1 | 
|   2 |    8 | 
|   2 |    9 | 
|   2 |   10 | 
|   2 |   11 | 
+-----------+---------------+ 

Rezept

+-----------+-----------------------+--------------+ 
|  id | name     | instructions | 
+-----------+-----------------------+--------------+ 
|   1 | Guacamole    | sample text | 
|   2 | Grilled avocado toast | sample text | 
+-----------+-----------------------+--------------+ 

Ingredient

+------------------+ 
| id | name  | 
+----+-------------+ 
| 1 | avocado  | 
| 2 | tomato  | 
| 3 | chili  | 
| 4 | garlic  | 
| 5 | lemon  | 
| 6 | salt  | 
| 7 | black pepper| 
| 8 | pesto  | 
| 9 | spinach  | 
| 10 | hard cheese | 
| 11 | bread  | 
+------------------+ 

sql

create table Recipe (
id SERIAL PRIMARY KEY, 
name CHAR(50), 
prep_time CHAR(10), 
instructions VARCHAR(2000)); 

create table Ingredient (
id SERIAL PRIMARY KEY, 
name CHAR(50)); 

create table Recipe_Ingredient (
recipe_id INT NOT NULL, 
ingredient_id INT NOT NULL, 
FOREIGN KEY(recipe_id) REFERENCES Recipe(id), 
FOREIGN KEY(ingredient_id) REFERENCES Ingredient(id)); 
+0

Willkommen auf Stapel Überl ow. Bitte geben Sie die Dinge an, die Sie bereits ausprobiert haben. Sie können Ihre Frage bearbeiten. – simbabque

+0

@simbabque Danke! Bearbeitet :) – Soffy

+0

Bitte kopieren und fügen Sie Ihre aktuelle Anfrage ein, – McNets

Antwort

0

Sind Sie auf der Suche Abfrage wie folgt:

with cte as (
select recipe_id, count(*) as cnt from Recipe_Ingredient 
group by recipe_id 
) select r.id as Recipeid, r.name, c.cnt from Recipe r join cte c 
    on r.id = c.recipe_id 
    order by c.cnt desc 
+0

Ja! Vielen Dank! Aber wie schreibe ich, wenn ich nach Avocado und Brot suchen und "Avocado Toast" als erstes Ergebnis bekommen will, weil es die meisten Zutaten enthält? – Soffy

+0

Ich habe es herausgefunden! Vielen Dank!! – Soffy

Verwandte Themen