Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Nach zwei Zutaten eines Rezeptes suchen

Begonnen von Beate1953, Juli 15, 2014, 18:47:13

⏪ vorheriges - nächstes ⏩

Beate1953

Hallo,

ich habe drei Tabellen, die über 1:n-Beziehungen verknüpft sind.
Tabelle Buecher mit Feld BuchID (Autowert, Primärschlüssel).
Tabelle Rezepte mit den Feldern RezepteID(AW, Prim) und BuchIDRef.
Tabelle Zutaten mit den Feldern ZutatenID(AW, Prim) und RezepteIDRef.

Für die Suche nach Rezepten mit einer bestimmten Zutat habe ich folgenden SQL-Code.

SQLstr = "SELECT DISTINCT Buecher.*, Rezepte.*, Zutaten.ZutatenID, Zutaten.RezepteIDRef, Zutaten.Menge, Zutaten.Masseinheit, Zutaten.Zutat "
   SQLstr = SQLstr & "FROM (Buecher LEFT JOIN Rezepte ON Buecher.BuchID = Rezepte.BuchIDRef) LEFT JOIN Zutaten ON "
   SQLstr = SQLstr & "Rezepte.RezepteID = Zutaten.RezepteIDRef "
   SQLstr = SQLstr & "WHERE (((Zutaten.Zutat) Like '" & SuchZutat & "'))"
   Me.RecordSource = SQLstr

Nun brauche ich aber eine WHERE-Bedingung, die mir erlaubt, Rezepte zu finden, die zwei vorausgewählte Zutaten haben; z.B. Marzipan und Nüsse.

Vielen Dank im Voraus für Eure Hilfe
Beate1953

MzKlMu

Hallo,
irgendwas stimmt da nicht mit Deinem Datenmodell.
Da es ja zu einem Rezept mehrere Zutaten geben kann, fehlt hier noch eine Tabelle.
In der jetzigen Tabelle "Zutaten" hat die RezepteIDRef nichts zu suchen.
Der Aufbau sollte wie folgt sein:
Tabelle Buecher mit Feld BuchID (Autowert, Primärschlüssel).
Tabelle Rezepte mit den Feldern RezepteID(AW, Prim) und BuchIDRef.
Tabelle Zutaten mit den Feldern ZutatenID(AW, Prim) und Zutatbezeichnung
Tabelle RezeptZutaten mit den Feldern RezeptZutatenID(AW, Prim), ZutatenIDRef und RezepteIDRef.

Gesucht wird dann mit den Fremdschlüsselfeldern also über die Schlüsselzahl. Auswahl über 2 (oder mehr) Kombifelder.

Gruß Klaus

Beate1953

Hallo,

die Tabelle Zutaten sieht folgendermaßen aus:

ZutatID      RezepteIDRef         Zutat                    Menge         ME
     1                  1                   Zucker                  200             g
     2                  1                   Mehl                     150             g
     3                  1                   Eier                          2             St.
     .                   .                       .                          .                .
     12                2                   Zucker                  150             g
     13                2                   Mehl                     300             g
     .                   .                        .                         .               .
     25                3                   Zucker                  100             g


Zu jeder RezepteID gehören mehrere Datensätze aus Zutaten. Jeder DS aus Zutaten gehört zu genau einem Rezept. Damit ist das meines Erachtens ein Fall für eine 1:n-Beziehung.

Kann man bei diesem Datenmodell nach einem oder mehreren Rezepten suchen, die zwei vorgegebene Zutaten enthalten?  Oder benötige ich dazu die Tabelle RezeptZutaten?

Viele Grüße
Beate1953

MzKlMu

Hallo,
irgendwie komme ich mit Deiner Beschreibung nicht klar. Hier fehlt noch eine Tabelle für die eigentlichen reinen Zutaten. Und in diese Tabelle muss dann auch ein Fremdschlüssel für die Mengeneinheit, für die auch eine Tabelle benötigt wird. Die jetzige Tabelle (Zutaten) wäre dann die vorgeschlagene Tabelle RezeptZutaten. In dieser Tabelle ist dann die Zutat nicht als Klartext sondern als Schlüsselzahl zu speichern. Die Mengeneinheit muss aus dieser Tabelle raus.
Das Datenmodell muss noch gründlich überarbeitet werden.
Gruß Klaus

MaggieMay

#4
Hallo Klaus,
ZitatUnd in diese Tabelle muss dann auch ein Fremdschlüssel für die Mengeneinheit
wie stellst du dir das vor? Mal brauchst du ienen Teelöffel Zucker für ein Rezept, dann zwei Esslöffel oder ein anderes Mal 300 Gramm. Zur "reinen" Zutat gehört also gewiss nicht die Mengeneinheit, sondern die gehört zum Rezept bzw. zur Rezept-Zutat. Für zwingend erforderlich - für eine erste simpel-gestrickte Umsetzung der Aufgabe - halte ich die Tabellen "Zutaten" und "Mengeneinheiten" nicht. Ich denke, man darf auch mal klein anfangen, wenn es darum geht, erste Erfahrungen mit Access zu sammeln, es muss nicht gleich alles perfekt sein. ;)

@Beate:
Die Abfrage mit den zwei Kriterien könnte folgendermaßen aussehen:    strSQL = "SELECT DISTINCT Buecher.*, Rezepte.*, Zutaten.ZutatenID, Zutaten.RezepteIDRef, Zutaten.Menge, Zutaten.Masseinheit, Zutaten.Zutat " & _
             "FROM (Buecher INNER JOIN Rezepte ON Buecher.BuchID = Rezepte.BuchIDRef) " & _
             "INNER JOIN Zutaten ON Rezepte.RezepteID = Zutaten.RezepteIDRef " & _
             "WHERE Exists (Select Count(*) FROM Zutaten As z " & _
                            "WHERE z.RezepteIDRef = Rezepte.RezepteID AND " & _
                            "      z.Zutat IN ('" & SuchZutat1 & "','" & SuchZutat2 & "') AND Count(*) = 2)"
Für den LEFT JOIN sah ich keinen Anlass, daher habe ich das geändert.
Freundliche Grüße
MaggieMay

MzKlMu

Hallo,
mit der Mengeneinheit hast Du bedingt recht. Für dein Beispiel ist eigentlich eine n:m Beziehung erforderlich die die zur Zutat passenden Mengeneinheiten speichert. Und dann kann man in einem Kombi nur die zur Zutat passenden ME auswählen.
Aber um bei deinem Beispiel zu bleiben, auch Teelöffel und Esslöffel Zucker lassen sich in Gramm ausdrücken. Ob man also wirklich die Einheiten Teelöffel und Esslöffel benötigt wäre noch zu bezweifeln. Aber da kann man sicherlich geteilter Meinung sein.
Aber die fehlende reine Zutattabelle halte ich unbedingt für erforderlich, weil man die Suche über Schlüsselfelder machen würde, die dann etwas anders läuft.

Auch wenn man klein anfangen will, sollte wenigstens die 3.Normalform erreicht werden.
Es erhöht das Verständnis.
Gruß Klaus

MaggieMay

ZitatOb man also wirklich die Einheiten Teelöffel und Esslöffel benötigt
Du kochst und backst wohl eher selten?  :)
Freundliche Grüße
MaggieMay

MzKlMu

#7
Hallo,
kochen tue ich häufig (und gern), backen eher nicht.  ;D
Aber zum Kochen brauche ich kein Rezept mehr, weil ich nur eine begrenzte Anzahl von Rezepten koche die ich auswendig kann.

Ich will ja nicht rechthaberich sein, was die Einheiten betrifft, ich hatte ja auch gezeigt, wie man es machen könnte (n:m) wenn man es korrekt aufbauen würde.

Man sollte auch nicht unbeachtet lassen, dass Beate ja möglicherweise an einer Verbesserung des Datenmodells Interesse haben könnte, sodass ich meine Hinweise durchaus für hilfreich halte. Was man daraus macht ist eine andere Sache.

Gruß Klaus

Hondo

Hallo,
ich meine das Datenkonstrukt ist noch nicht normalisiert. Ich sehe da die Tabellen Zutaten, Rezeptzutaten, Rezept und Buecher.
Gruß Andreas

Beate1953

Hallo,

Vielen Dank für Eure hilfreichen Tipps und Anregungen.

Ich habe mir aus Euren Tipps jetzt anhängendes Modell zusammengebastelt. Geht das, oder überlaste ich damit die Tabelle RezepteZutat?

Viele Grüße
Beate1953

DF6GL

Hallo,


Zitatüberlaste ich damit die Tabelle RezepteZutat?
;) ;)

die paar Bytes, die Du für die gesamten Rezepte zur Speicherung brauchst, lassen  Access nur ein müdes Runzeln abringen ....


Ich frage mich aber, ob und wo  Du die Verarbeitungsanweisungen der einzelnen Rezepte hinterlegen willst. Ich nehme nicht an, dass Du die Dir merken kannst/willst. Sodann fällt mir auf, dass Geräte-Einstellungen (z. B.: Backofen, 180 ° Umluft) nirgends auftauchen.  Man könnte allerdings die Tabelle "tblZutaten" dafür "missbrauchen", eine solche Geräteeinstellung ist ja eine "Zutat" im weitesten Sinn...   8)

Hondo

Hallo,
du willst doch anhand von Zutaten Rezepte finden und die Information in welchem Kochbuch/Seite das Rezept steht.
Warum hast du dann Mengenangaben in der Tabelle? Das ist doch dann überflüssig da Mengenangaben und Verarbeitungshinweise im Kochbuch stehen.

Andreas

DF6GL

Hallo,

aha, wenn das eine Rezeptbuch-Verwaltung werden soll, dann ist in der Tat nur die Speicherung der Bücher und -seiten erforderlich....   :)

Beate1953

Hallo,

okay, dann nehme ich das Feld Menge aus der Tabelle RezepteZutaten und lösche die Tabelle Einheiten ganz.

Damit dürfte dann alles passen.

Vielen Dank für all Eure Hilfe
Beate1953