alle cocktails zeigen, be denen man die zutaten xy braucht

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

  • alle cocktails zeigen, be denen man die zutaten xy braucht

    hi

    ich habe eine datenbank, in der cocktailrezepte gespeichert sind.
    die zutaten, die man für einen cocktail braucht sind in dem feld "Zutaten" gespeichert. die zutaten werden so gespeichert: "Zutat1, Zutat2, Zutat3, usw" und dann per explode() am komma getrennt..

    jetzt wollte ich eine erweiterte suche schreiben.
    bei der suche soll der user auswählen können, welche zutaten er zu hause hat und welche cocktails er dann mit diesen zutaten mixen kann.

    meine frage ist jetzt, wie ich das am geschicktesten lösen kann..
    ich habs mir folgendermaßen überlegt:

    zuerst werden alle zutaten, die bei den cocktails verwendet werden in eine extra datenbank eingetragen. die zutaten in der extra datenbank werden dann noch in drei kategorieen aufgeteilt. und zwar: Spirituosen, unalkoholische Zutaten und dekoration

    dann kann der user in einem formular, in dem alle zutaten aufgelistet sind über checkboxen auswählen, ob er die zutat zu hause hat oder nicht.

    wenn das formular abgeschickt wurde, dann werden in einer while schleife alle cocktails durchgegangen. dort wird dann selektiert zwischen cocktails, die der user mit den zutaten, die er zu hause hat mixen kann und zwischen cocktails, die er mit den zutaten die er zu hause hat nicht mixen kann

    das wollte ich so machen, indem ich eine while schleife durch alle eingetragenen cocktails laufen lasse und dann über ereg() prüfe, ob die für den cocktail notwendigen zutaten in dem formular ausgewählt wurden.. wenn ja, dann wird die id des cocktails in einen array geschrieben, wenn nicht, dann halt nicht..

    zuletzt werden dann noch alle cocktails, deren id in dem array ist ausgelesen und fertig..

    jetzt zu meiner frage..
    haltet ihr diese vorgehensweise für sinnvoll?
    weil ich bin mir da nicht so sicher.. es sind knapp 800 einträge in der datenbank.. wäre das nicht sehr strapazierend für die db?
    oder hat vielleicht jemand eine bessere idee, wie diese suche zu verwirklich ist?

    mfg
    whizzler

  • #2
    mach 3 tabellen ... eine für cocktails, eine für zutaten und eine cocktailstozutaten ...

    in der coktailtabelle machste nur ne id und name des cocktails und wie er zubereitet wird, in der zutaten-tabelle alle zutaten mit id und name und in der cocktailtozutaten tabelle weisst du die zutaten den cocktails zu ....

    dann suchst du dir mit Hilfe der zutatenids die cocktails raus die man mixen kann ... ist schneller da nur mit integern gearbeitet wird und nicht ganze texte durchsucht werden müssen ....

    mfG
    CMS-X Medien- und Modelagentur

    Kommentar


    • #3
      hi
      danke für die antwort.

      kannst du mir vielleicht noch erklären, wie du die tabelle cocktailstozutaten aufbauen würdest?
      und vor allem, wie würdest du die zutaten id's da reinschreiben?

      mfg
      whizzler

      Kommentar


      • #4
        cocktail_id | zutat_id | menge
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          oh ja menge der zutaten hatte ich vergessen

          zutatenid ? einfach per auto increment reinschreiben lassen

          mfG
          CMS-X Medien- und Modelagentur

          Kommentar


          • #6
            hmm,

            cocktaildb hatte sicher jeder schonmal geplant

            frage: in welcher weise verwaltest du die maßeinheiten (cl, stück, g, ... ?) extra-spalte? wieviel verschiedene maßeinheiten hast du?
            EDIT:
            ach nne, du hast ja lustiger weise alles in einer spalte, ... dann möchte ich mal den gadanken aufwerfen, sowohl die zutaten einzeln zu speichern (wie schon erwähnt) und die maßeinheiten auch. oder du legst pro möglicher zutat die standardmaßeinheit fest ... toll, plötzlich kommen mir die ideen

            Zuletzt geändert von derHund; 08.02.2004, 15:06.
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              danke

              jetzt müssen die cocktails wahrscheinlich alle neu eingetragen werden, aber egal
              aber ich will ja schließlich dem server nix schlechtes tun..

              Kommentar


              • #8
                hi
                ich bin noch auf n anderes problem gestoßen..

                ich gehe also duch die cocktialstozutaten tabelle mit einer while schleife durch.
                jetzt wurden in dem formular zutat1 und zutat2 ausgewählt. dann habe ich einen cocktail, bei dem ich die zutat1 und die zutat2 brauche. wie kann ich nun überprüfen, ob das ALLE zutaten sind, die man für den cocktail braucht, ohne einen query in der while schleife einbauen zu müssen?
                weil wenn ich da dann doch wieder nen query einbauen muss, dann kann ichs gleich so machen, wie ichs bei meinem ersten post beschrieben habe..

                mfg
                whizzler

                Kommentar


                • #9
                  du fragst die zutaten ab, die du für cockteil x brauchst, aber ohne zutat a und ohne zutat b
                  dann noch mit COUNT zählen und gut is
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    mir ist gerade noch eine andere möglichkeit gekommen, die vom umschreibaufwand her weniger wäre

                    ich würde dazu die momentane cocktail datenbank plus eine zutaten datenbank verwenden.

                    zuerst mache ich einen query, indem ich alle zutaten und alle id's aus der cocktail datenbank auslesen lasse.
                    dann schreibe ich diese beiden sachen zusammen in einen array. dieser array wird dann wiederum in einen array geschrieben.
                    so dass ich dann, wenn der query zu ende ist alle cocktail id's und zutaten in einem array habe.
                    anschließend durchlaufe ich den array und überprüfe dort, ob die zutaten, die man braucht ausgewählt wurden.

                    ich glaube, dass das schneller ist als die erste methode, weiß aber nicht, ob es schneller ist als die methode von DanielD
                    was haltet ihr davon?

                    Kommentar


                    • #11
                      Code:
                      SELECT 
                        COUNT(zutat_id)
                      FROM
                        cocktailzutaten
                      WHERE
                        cocktail_id=5
                        AND
                        zutat_id NOT IN (5, 73)
                      das sollte dir die anzahl der noch fehlenden zutaten für coktail 5 ausgeben
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        ok
                        danke.. was haltet ihr von dem lösungsansatz, den ich am ende der ersten seite gepostet habe?

                        Kommentar


                        • #13
                          ich bin immer noch auf seite 1

                          wenn du den vorschlag über meinem SELECT meinst: versteh ich nich, klingt aber umständlich
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            ok

                            dann versuch ichs nochmal..
                            zuerst will ich mit einem query von allen cocktails die id's und die zutaten in einen array schreiben.
                            dann will ich den array durchsuchen, welche cocktails man mit den ausgewählten zutaten mixen kann.

                            wenn man den cocktail mit den gewählten zutaten mixen kann, dann kommt die id in einen anderen array.
                            dann habe ich zum schluss einen array, indem die id's von allen cocktails stehen, die mit den ausgewählten zutaten gemixt werden können.

                            und im letzten schritt werden dann alle cocktails ausgelesen, deren id in dem array ist..
                            ich hoffe das war verständlicher

                            ich finde das is ne recht gute lösung..
                            aber kann ja sein, dass diese methode entscheidende nachteile hat, die mir nicht bekannt sind

                            Kommentar


                            • #15
                              das kannst du alles mit nur EINER query und der DB machen.
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X