Beacker: NEwbee Frage zur Abfrage einer MySql Datenbank

Hallo,
habe Windows XP, MYsql, Php
Bräuchte einen kurzen Denkanstoss (kann ruhig kräftiger Anstoss sein;-)
HAbe z.B. eine Rezeot Datenbank mit Tabellen:

  1. Kochrezept
       rezept_id
       rezept
  2. Zutaten
       zutaten_id
       zutat
  3. Zuordnung von Zutaten auf jeweiliges Rezept
       rezept_id
       zutaten_id
       menge

Jetzt schaue ich am Abend in die Vorratskammer und sehe, daß ich noch kartoffeln und Zucchini habe - und möchte natürlich alle Rezepte sehen, in denen Zucchini und Kartoffeln vorkommen. Wie muß ich da die Abfrage schreiben?
select rezept, zutate, rezept_id, zutaten_id from T_Rezept, T_Zutaten, T_Zuordnung where UND HIER SETZT ES AUS
Klar wenn ich nur nach Kartoffeln oder nach Zucchine suche aber wie läuft das wenn beide Zutaten gefunden werden müssen

Danke für die Hilfe,
Gonzo

  1. Hallo Beacker,

    1. Kochrezept
         rezept_id
         rezept
    2. Zutaten
         zutaten_id
         zutat
    3. Zuordnung von Zutaten auf jeweiliges Rezept
         rezept_id
         zutaten_id
         menge

    Jetzt schaue ich am Abend in die Vorratskammer und sehe, daß ich noch kartoffeln und Zucchini habe - und möchte natürlich alle Rezepte sehen, in denen Zucchini und Kartoffeln vorkommen. Wie muß ich da die Abfrage schreiben?
    select rezept, zutate, rezept_id, zutaten_id from T_Rezept, T_Zutaten, T_Zuordnung where UND HIER SETZT ES AUS

    Du suchst den INNER JOIN :-)
    Du suchst OR oder IN

    SELECT
        rezept,
        zutat,
    FROM T_Rezept r
    INNER JOIN T_Zuordnung zu ON r.rezept_id = zu.rezept_id
    INNER JOIN T_Zutaten z ON zu.zutaten_id = z.zutaten_id
    WHERE zutat IN ('Zucchini', 'Kartoffeln')

    liefert alle Rezepte, in denen Zucchini oder Kartoffeln oder beides als Zutat auftauchen

    Klar wenn ich nur nach Kartoffeln oder nach Zucchine suche aber wie läuft das wenn beide Zutaten gefunden werden müssen

    Wenn beide Zutaten im Rezept sein _müssen_
    dann suchst Du AND, zusätzlich musst Du die Spalte zutat zweimal in Deine Abfrage aufnehmen:

    SELECT
        rezept,
        zutat AS z1,
        zutat AS z2
    FROM T_Rezept r
    INNER JOIN T_Zuordnung zu ON r.rezept_id = zu.rezept_id
    INNER JOIN T_Zutaten z ON zu.zutaten_id = z.zutaten_id
    WHERE z1 LIKE 'Zucchini' AND z2 LIKE 'Kartoffeln'

    Nicht getestet :-)

    Freundliche Grüsse,

    Vinzenz