Rezeptsuchmaschine

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

  • Rezeptsuchmaschine

    Hallo!

    Ich möchte mir eine kleine Datenbank mit Rezepten anlegen. Dafür möchte ich eine Suchfunktion bauen, in der ich die Zutaten die ich zuhause habe auswählen kann, und mir die Suchfunktion dann die gerichte raussucht, die ich ausschliesslich aus diesen Zutaten machen kann.

    Also müsste ich dafür eine mySQL Tabelle erstellen, in der ich die Gerichte speicher, und denen die Zutaten zuordne, die dafür benötigt werden. Das ist soweit kein Problem.

    Aber wie muß ich die Suchabfrage (mySQL Query) gestalten, so dass auch wirklich nur die Gerichte ausgewählt werden, die den ausgewählten Zutaten entsprechen!? Ich müsste dann ja sagen: Wähle die Gerichte aus, die sich aus Zutat A B, A C, B C oder A B und C machen lassen, aber keine wo zutat D E und F vorkommt. Aber wie setz ich das am effektivsten in ein mySQL Query um!? Und wie müssten die SQL Tabellen dafür am besten aussehen!?

    Hat jemand ein paar Vorschläge für mich!?

    Danke!

  • #2
    Naja. Stichwort Normalisierung.

    Das würde bedeuten: Eine Tabelle für Rezepte, eine für Zutaten. Sicherlich wäre ratsam, die Tabelle Zutaten fest anzulegen, also das nicht jeder Hans und Frans seine falschgeschriebene Kieselerde selber eintippt, sondern sie auswählen muss.

    Also hätten wir:
    Eine Rezepttabelle
    Eine Zutatentabelle
    Eine Lookuptabelle (wo rezept id und zutat-id sich einander zurordnen - also wo drinsteht rezept soundso zutat soundso menge 300 einheit gramm).

    Abfragen tust du das dann mit Stichwort Joins.

    Fang einfach an, und melde dich dann mit konkreten Fragen wieder.
    Und mach mal was Leckeres für Hackbraten.

    ich glaube

    Kommentar


    • #3
      vielleicht sowas
      Code:
      SELECT * FROM rezepten rez WHERE
      (SELECT zutat FROM zutaten zut WHERE zut.rez_id = rez.id ORDER BY zutat)
       = ("Appel", "Banane")
      ist natürlich nicht billig so ein correlated subquery ~.~

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Joins und sowas ist mir schon klar. Das Problem ist es halt eben die Suchabfrage zu stricken.

        Ich kann ja nun sagen: Wähle mir die Gerichte aus der Datenbank, in denen ein Apfel, eine Kiwi und eine Banane vorkommen. Das ist aber nicht was ich haben will.

        Ich möchte sagen: Wähle mir die Gerichte, die aus einem Apfel und einer Kiwi, einem Apfel und einer Banane, einer Kiwi und einer Banane, oder aus allen dreien bestehen, aber bitte nichts wo noch andere Zutaten sind die eben nicht vorkommen dürfen.

        Das einzige was mir dazu einfallen würde wäre es sämtliche Zutaten aus der Datenbank zu holen und sagen wir mal in ein Array zu stecken, dieses dann mit den angekreuzten Zutaten zu vergleichen, die angekreuzten Zutaten dann aus dem Array entfernen, und eine Negativabfrage zu starten, in dem ich sage, wähle mir alle Gerichte, in denen keine Birne, keine Kirsche, kein Erdbeere, keine ... vorkommt.

        Damit hätte ich dann wirklich nur die Gerichte, die sich aus den angekreuzten Zutaten machen lassen, und zwar aus allen Zutaten, oder nur einigen.

        Allerdings finde ich das ganze recht umständlich, und es bedarf auch noch zwei mySQL Abfragen. Es wird da doch aber sicherlich eine möglichkeit geben das ganze in ein Query zu verpacken, oder?

        Kommentar


        • #5
          Oder drücken wir es mal so aus:

          Eine Abfrage wie:

          SELECT * FROM rezepte WHERE zutat = 'Apfel' OR zutat = 'Banane' OR zutat = 'Kiwi'

          Würde mir zwar alle Gerichte rausfischen in denen ein Apfel oder eine Banane oder eine Kiwi vorkommt, würde aber auch sämtliche anderen Zutaten tolerieren, die nicht angekreuzt sind. Und genau darum geht es, dass andere Zutaten ausgeschlossen und NICHT toleriert werden dürfen, so dass ich nur die Gerichte bekomme die aus einem Apfel und einer Banene, einem Apfel oder einer KIWI, einer Banane oder einer Kiwi, oder eben aus allen dreien, aber aus nichts anderem halt...

          Kommentar


          • #6
            Original geschrieben von PHPler
            Und genau darum geht es, dass andere Zutaten ausgeschlossen und NICHT toleriert werden dürfen, so dass ich nur die Gerichte bekomme die aus einem Apfel und einer Banene, einem Apfel oder einer KIWI, einer Banane oder einer Kiwi, oder eben aus allen dreien, aber aus nichts anderem halt...
            Na wenn du eine Tabelle mit den zwei Spalten Rezept-Id und Zutaten-Id hast, dann brauchst du dafür ja nur die IDs der drei gesuchten Zutaten mit WHERE abfragen, die Sätze nach der Rezept-Id gruppieren und mit COUNT die Anzahl zählen - und schauen, ob diese kleiner gleich drei ist.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              @wahsaga: Könntest Du mal ne Beispielabfrage dafür posten!? Irgendwie kriege ich das grad nicht zusammen...

              Kommentar


              • #8
                OMG manchmal sieht man den Walt vor lauter Bäumen nicht. Wenn ich schon ein Formular habe, in dem man die Zutaten markieren kann, dann kann ich gleich überprüfen, welche Zutaten NICHT markiert wurden, und daraus eine Abfrage machen, die diese Zutaten ausschließt. Damit habe ich dann alle Gerichte, die den markierten Zutaten entsprechen in einer mySQL Abfrage. Womit sich das Thema erledigt hätte...

                Kommentar

                Lädt...
                X