mysql Subqueryproblem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysql Subqueryproblem

    Hallo zusammen,
    ich baue gerade eine Kochseite auf. die dbs stehen und es tut alles auch so weit.
    nun möchte ich eine suche innerhalb der rezepte absetzen, die sucht, in welchen rezepten die zutat X
    als auch die zutat Y vorkommt.
    bisher mache ich das über 2 db-abfragen, da klappts dann aber mit blättern nicht so doll :-)

    mit der abfrage

    "SELECT rezept_zutaten.rezept_id, rezept_zutaten.zutaten_id, rezept.name
    FROM rezept_zutaten LEFT JOIN rezept ON rezept_zutaten.rezept_id = rezept.id
    where zutaten_id = X order by name asc"

    finde ich alle rezepte in denen die zutat X vorkommt.
    (im beispiel-sql gibt es mit der zutat 2 und 29 diverse treffer) siehe (http://www.kochtagebuch.de/rezept_zutaten.sql)
    ich möchte aber alle rezepte, in denen die zutat X als auch Y, Z ... N vorkommen.

    eigentlich müsste das über eine Multiple Row Subquery gehen, soweit ich aber weiss, gibt es hier
    als Mengenoperatoren lediglich (ANY, ALL, [NOT] IN, EXISTS, UNION, INTERSECT, MINUS)
    quelle : (http://www.inweb.de/chetan/Deutsch/Ressourcen/SQL.html).
    ich müsste aber ein AND haben.

    da ich nun schon diverse stunden mit dem problem verbracht habe wollte ich euch bitten, ob jemand
    eine idee hat ??

    geht das überhaupt mit einer query ??

    bin für jede hilfe dankbar !!
    greez
    markus

    p.s. Mysql-Version 5.0.x / php-Version 5.2
    Zuletzt geändert von kochtagebuch; 18.08.2007, 20:57.

  • #2
    Re: mysql Subqueryproblem

    Ein JOIN für jede Zutat, die drin sein muß?

    Kommentar


    • #3
      meinst du einen self-join ?

      habs probiert mit
      SELECT rezept_zutaten.zutaten_id AS "z1", rezept_zutaten.zutaten_id AS "z2"
      FROM rezept_zutaten
      WHERE "z1" =2
      AND "z2" =29

      mit dem ergebniss :
      MySQL lieferte ein leeres Resultat zurück (d. h. null Zeilen)

      selbes resultat wie :
      SELECT rezept_zutaten.zutaten_id AS "z1", rezept_zutaten.zutaten_id AS "z2"
      FROM rezept_zutaten
      WHERE rezept_zutaten.zutaten_id =2
      AND rezept_zutaten.zutaten_id =29

      noch ne idee ??

      Kommentar


      • #4
        Da steckt doch kein einziger JOIN drin.

        Ich meinte es so:
        SELECT z1.... FROM rezept r
        LEFT JOIN rezept_zutaten z1 ON z1.rezept_id = r.id AND z1.zutaten_id = X
        ...
        LEFT JOIN rezept_zutaten zN ON zN.rezept_id = r.id AND zN.zutaten_id = N
        WHERE {mind. ein zK ist nicht NULL}

        Mit GROUP_CONCAT ginge es vielleicht auch, aber dafür bin ich jetzt zu müde.

        Kommentar


        • #5
          wir ham uns irgendwie falsch verstanden ..
          die tabelle die durchsucht wird ist primär die rezept_zutaten

          also, ich habe eine tabelle rezepte
          CREATE TABLE `rezept` (
          `id` int(11) NOT NULL auto_increment,
          `name` char(70) default NULL,
          PRIMARY KEY (`id`)
          )

          eine tabelle zutaten
          CREATE TABLE `zutaten` (
          `id` int(11) NOT NULL auto_increment,
          `name` varchar(50) default NULL,
          PRIMARY KEY (`id`)
          )

          eine tabelle rezept_zutaten
          CREATE TABLE `rezept_zutaten` (
          `id` int(11) NOT NULL auto_increment,
          `rezept_id` int(11) default '0',
          `zutaten_id` int(11) default '0',
          PRIMARY KEY (`id`)
          )

          Die Beziehungen sehen vereinfacht wie folgt aus :

          [FONT=arial]DB : rezept         rezept_zutaten         zutaten
          Feld : id <--(1 : 1)--> rezept_id
          Feld : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs p;&nbsp;&nbsp;&nbsp;zutaten_id <--(n : 1)--> id
          [/FONT]

          Kommentar


          • #6
            nun möchte ich eine suche ..., die sucht, in welchen rezepten die zutat X als auch die zutat Y vorkommt.
            Das bringt mich intuitiv auf SELECT * FROM rezepte mit dem genannten Rattenschwanz von JOINS. Irgendwie gefällt mir diese Lösung zwar selbst nicht, aber mir fällt einfach nichts besseres ein.

            Was du hier als "primär" bezeichnest, ist mir völlig egal. Überlege dir lieber, was beim Auswerten der Query passiert oder probiere sie mal aus.
            Zuletzt geändert von onemorenerd; 19.08.2007, 13:39.

            Kommentar

            Lädt...
            X