Ich habe eine einfache Rezept-Datenbank, die ich versuche, eine Abfrage zu schreiben, die ein Rezept sowie alle ziehen wird zugehörige Zutaten und Schritte. Das Rezept selbst hat eine Viele-zu-viele-Beziehung mit Inhaltsstoffen (um die Wiederverwendung von Inhaltsstoffeinträgen zu fördern) und eine Eins-zu-Viele-Beziehung mit Schritten (Chancen sind ein Rezept hat keinen identischen Schritt zum anderen, also keine Notwendigkeit zur Wiederverwendung hier).SQLite - Wählen Sie mit JOINs zu Viele-zu-Viele und Eins-zu-Viele
Die Datenbank ist Setup wie so:
CREATE TABLE Recipe (
_id INTEGER PRIMARY KEY,
recipe_name TEXT UNIQUE NOT NULL
);
CREATE TABLE Ingredient (
_id INTEGER PRIMARY KEY,
ingredient TEXT UNIQUE NOT NULL
);
CREATE TABLE RecipeIngredient (
_id INTEGER PRIMARY KEY,
recipe_id INTEGER,
ingredient_id INTEGER,
amount REAL,
FOREIGN KEY (recipe_id) REFERENCES Recipe(_id),
FOREIGN KEY (ingredient_id) REFERENCES Ingredient(_id)
);
CREATE TABLE Step (
_id INTEGER PRIMARY KEY,
instruction TEXT NOT NULL,
number INTEGER NOT NULL,
recipe_id INTEGER,
FOREIGN KEY (recipe_id) REFERENCES Recipe(_id)
);
Ich bin in der Lage durch _id alle Daten für ein bestimmtes Rezept ziehen mit inneren Joins auf allen Tischen (die eine Tonne von doppelten Daten erstellt), aber wo ich feststecke, ist, wie kann ich diese gruppieren/bestellen, um die Daten nützlich zu machen, ohne dass ein zusätzliches Parsen der Ergebnisse notwendig ist, um ein bedeutungsvolles Objekt zu erhalten? Wäre es in zwei Fragen besser (eine für die Zutaten und eine für die Schritte)?
UPDATE
einige Beispieldaten hinzufügen, die von der Auswahl einer Rezept-ID kommt zurück, zwischen den Tischen zu tun INNER JOIN (geordnet nach Ingredienz/Schrittzahl):
|| recipe || || ingredient|| ||step|| ||step number||
"Recipe One" "Ingredient 1" "Step 1" "1"
"Recipe One" "Ingredient 1" "Step 2" "2"
"Recipe One" "Ingredient 1" "Step 3" "3"
"Recipe One" "Ingredient 2" "Step 1" "1"
"Recipe One" "Ingredient 2" "Step 2" "2"
"Recipe One" "Ingredient 2" "Step 3" "3"
"Recipe One" "Ingredient 3" "Step 1" "1"
"Recipe One" "Ingredient 3" "Step 2" "2"
"Recipe One" "Ingredient 3" "Step 3" "3"
Zeigen Sie uns einige Daten und was Sie wollen. Zeigen Sie uns auch Ihre 'INNER JOIN' mit' duplicated data' und das können wir auch beheben. Sie können ein funktionierendes Beispiel auf sqlFiddle.com erstellen. Verwenden Sie 'Text to DDL', um Ihr Datenbankschema zu laden. –
@JuanCarlosOropeza fügte weitere Informationen hinzu, aber nach Thorstens Antwort denke ich, dass es besser ist, das in zwei Abfragen zu trennen. –