Abfrageproblem bei where Bedingung

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

  • Abfrageproblem bei where Bedingung

    Hallo, ich habe ein Problem, das ich einfach nicht lösen kann.
    Ich habe Cocktailrezepte, die grundsätzlich in 2 tabellen gespeichert sind.
    cocktail, und czutat (dort sind die zutaten gespeichert), beide sind über die cocktail_id verknüpft.

    Ich möchte nun nach Rezepten suchen, die z.B. sowohl Wodka, also auch Ananassaft enthalten. Ich schaff aber leider nur die "OR"-Verknüpfung, bei der AND kommt absolut nix raus, ist sicherlich eine Abfragefehler.



    SELECT DISTINCT a.cocktail_id, a.cname, a.ckat_id, a.rating_g
    FROM cocktail a, czutat b, cgerlebnis c
    WHERE a.ckat_id =1
    AND c.cocktail_id = a.cocktail_id
    AND b.zutat_id =$zutat <-----hier sollts weitergehen-----<<<
    AND b.cocktail_id = a.cocktail_id
    ORDER BY a.cname
    LIMIT 0 , 30
    Suche immer Linkpartner für meine Cocktailseite ;-)

  • #2
    und warum liest du den Sticky-Thread nicht?

    Kommentar


    • #3
      Original geschrieben von asp2php
      und warum liest du den Sticky-Thread nicht?
      Peinlicherweise hab ich das bereits, ich fürchte, ich bin zu unbeschlagen in mysql, als das ich da Zusammenhänge herausfiltern könnte :-(

      zusätzlich hab ich auch noch probleme mit der neuen syntax...ich kenn bisher nur die oben genannten ausdrücke :-)
      Zuletzt geändert von yellow23; 28.10.2005, 14:28.
      Suche immer Linkpartner für meine Cocktailseite ;-)

      Kommentar


      • #4
        Wenn du nach zwei Zutaten suchen willst, brauchst du die Tabelle mit den Zutaten auch zweimal
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Original geschrieben von mrhappiness
          Wenn du nach zwei Zutaten suchen willst, brauchst du die Tabelle mit den Zutaten auch zweimal
          hmm...ich möchte alerdings nach 1-open end zutaten suchen können.

          Ich möchte einfach aus einer Liste von 300 Zutaten Zutaten auswählen, und dann sollen jene Rezept angezeigt werden, die u.a. genau diese Zutaten enthalten.

          die Zutatentabelle sieht vereinfacht so aus

          zutat_id, zname, Cocktail_id,

          die Tabelle Cocktail

          Cocktail_id, cname

          Jetzt möchte ich einfach die Cocktailnamen herausbekommen, wenn ich z.B. Wodka und Bitter lemon auswähle.

          wenn ich die Bedingung where b.zutat_id=$zutat_id1 and b.zutat_id=$bzutat_id2 verwende, bekomme ich leider keine Ergebnisse, nur bei Verknüpfung mit "OR", das ist zwar richtig, aber leider nicht wie gewünscht.
          Zuletzt geändert von yellow23; 28.10.2005, 14:41.
          Suche immer Linkpartner für meine Cocktailseite ;-)

          Kommentar


          • #6
            Du solltest die Cocktail-ID aus der Zutatentabelle rauswerfen und eine neue Tabelle anlegen, di enur zutat_id und cocktail_id enthält.

            mit
            Code:
            SELECT
              c.cocktail_name
            FROM
              cocktails c
              INNER JOIN cocktail_zutaten_zuordnung z
                ON c.cocktail_id = z.cocktail_id
            WHERE
              z.zutat_id IN (1, 5, 3, 7, 8)
            Selektierst du alle Cocktails, die mindestes eine der gewählten Zutaten benötigen.

            Wenn du jettz willst, dass alle benötigt werden, musst du die Abfrage so erweitern, dass die Zutaten gezählt werden und die Summer der Zutaten muss genausogroß sein, wie die Summe übergebener Zutaten

            Pseudoabfrage:
            Code:
            SELECT
              c.cocktail_name, Anzahl an Zutaten
            FROM
              cocktails c
              INNER JOIN cocktail_zutaten_zuordnung z
                ON c.cocktail_id = z.cocktail_id
            GRUPPIERT NACH cocktail_name
            WHERE
              z.zutat_id IN (1, 5, 3, 7, 8)
            HAVING
              Anzahl an Zutaten = 5
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Original geschrieben von yellow23
              hmm...ich möchte alerdings nach 1-open end zutaten suchen können.

              Ich möchte einfach aus einer Liste von 300 Zutaten Zutaten auswählen, und dann sollen jene Rezept angezeigt werden, die u.a. genau diese Zutaten enthalten.

              die Zutatentabelle sieht vereinfacht so aus

              zutat_id, zname, Cocktail_id,

              die Tabelle Cocktail

              Cocktail_id, cname

              Jetzt möchte ich einfach die Cocktailnamen herausbekommen, wenn ich z.B. Wodka und Bitter lemon auswähle.

              wenn ich die Bedingung where b.zutat_id=$zutat_id1 and b.zutat_id=$bzutat_id2 verwende, bekomme ich leider keine Ergebnisse, nur bei Verknüpfung mit "OR", das ist zwar richtig, aber leider nicht wie gewünscht.


              Vielleicht kann ich das auch nicht mit einer Abfrage erledigen...hmm..

              1) Alle Cocktailrezepte auslesen,

              und dann in einer Schleife für jede cocktail_id:

              2) Mit einem Join prüfen, wie groß die Anzahl der gleichen Zutaten ist zwischen der Zutatentablle für jeden Cocktail
              und der abgefragten Zutaten (könnte ich temporär in Tabelle abspeichern).


              Das funktioniert sogar sicher, hab sowas ähnliches schon implementiert.

              Allerdings irgendwie aufwendig.
              Suche immer Linkpartner für meine Cocktailseite ;-)

              Kommentar


              • #8
                Original geschrieben von mrhappiness


                Wenn du jettz willst, dass alle benötigt werden, musst du die Abfrage so erweitern, dass die Zutaten gezählt werden und die Summer der Zutaten muss genausogroß sein, wie die Summe übergebener Zutaten


                Ich glaube, ich hatte gerade eine sehr ähnliche Idee, siehe oben;-)

                Ist doch aufwendiger, als ich anfangs dachte. Ich glaube, ich werde meine Lösung wählen, mit der temporären Tabelle, weil ich da keine Tabellenstruktur ändern muss, und es schon fertige Spripts gibt, die ich nur an ganz wenig ändern muss. Danke aber für die Hilfe, ich brauch oft Denkanstösse in die richtige Richtung, ich hab mich auf ein einziges SQL-Statement versteift.
                Suche immer Linkpartner für meine Cocktailseite ;-)

                Kommentar


                • #9
                  Du musst die Tabellesnturktur nicht ändern um das in einer Abfrage zu machen, das war nur ein Vorschlag, um das ganez weniger redundant zu haben.

                  Wie oft hast du denn momentan "Crushed Ice" in der Datenbank stehen und wie oft einfach nur die ID dazu?
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Original geschrieben von mrhappiness
                    Du musst die Tabellesnturktur nicht ändern um das in einer Abfrage zu machen, das war nur ein Vorschlag, um das ganez weniger redundant zu haben.

                    Wie oft hast du denn momentan "Crushed Ice" in der Datenbank stehen und wie oft einfach nur die ID dazu?
                    Ups..sorry..hab das Beispiel sehr vereinfacht )

                    Ich habe natürlich eine zwischentabelle angelegt, die czutat heisst, und nur
                    cocktail_id und zutat_id enthält. Hab dich dann oben auch noch falsch verstanden.
                    Suche immer Linkpartner für meine Cocktailseite ;-)

                    Kommentar

                    Lädt...
                    X