WHERE spalte% LIKE 'suchwort' ???

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

  • WHERE spalte% LIKE 'suchwort' ???

    Hallo !

    Ich möchte in einer Tabelle mit über 70 Spalten 20 Spalten abfragen die
    z1 z2 z3 ... bis z20 heißen.
    Sie sollen alle nach dem selben suchwort durchsucht werden.

    Meine Idee war nun:

    PHP-Code:
            $result=mysql("usr_web10_1","SELECT * FROM rezepte WHERE z% LIKE '%$suchwort%' ORDER BY name ASC"); 
    Leider funktioniert das nicht, er stößt sich an dem z%
    Desweiteren hat die Tabelle noch 2 andere Spalten die mit z beginnen und die sollen aber nicht durchsucht werden.

    Kann man in der Abfrage irgendwie elegant und kurz das z1 - z20 zusammenfassen oder muss ich in dem Abfragestring wirklich 20x WHERE LIKE machen?

    Danke und Gruss,

    André

  • #2
    Meistens ist eine Benennung von Attributen im Stile von z1, z2, z3 ... zN in einem fehlerhaften Datenbank entwurf begründet ...

    ... anyway ... ich würde mir an Deiner Stelle mal die FULLTEXT Funktionalität der MySQL anschauen ... wenn Dir das nicht weiterhilft wirst Du wohl in den sauren Apfel beißen müssen und z1 LIKE '%$suchwort%' OR z2 LIKE '%$suchwort%' .... prüfen müssen ... !

    Mich würde mal interessieren welche Doku die auf die Syntax z% gebracht hat ... ziemlich absurd ... oder?
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      z% ist gut

      mach doch einfach nen for schleife, die dir die abfrage bastelt..
      nein?

      Kommentar


      • #4
        z1 bis z20 sind 20 Felder in denen Rezeptzutaten drin stehen.
        zutat1 zutat2 zutat3 usw... habs einfach mit z1 bis z20 angekürzt.

        auf das z% bin ich gekommen weil man den zu suchenden Wert '%$suchwort%' ja auch mit einem % erweitern kann, da dachte ich das geht es auch, leider gab es immer eine Fehlermeldungen und da es sicher wesendlich komplexere Datenbanken gibt als meine kleine habe ich die Vermiuting gehabt es giber einfacher als 20 mal LIKE WHERE , aber beim googeln nichts brauchbares gefunden.

        Kommentar


        • #5
          @thebrain

          nein es soll nur einmal die Datenbank abgefragt werden. Es werden in diesem Abfragestring auch noch andere Spalten abgefragt, das habe ich aber zur vereinfachung des Problems hier komplett weg gelassen, die würde ich ja dann auch 20x abfragen wenn ich ne Schleife bauen würde.

          Kommentar


          • #6
            Original geschrieben von AndreV
            @thebrain

            nein es soll nur einmal die Datenbank abgefragt werden. Es werden in diesem Abfragestring auch noch andere Spalten abgefragt, das habe ich aber zur vereinfachung des Problems hier komplett weg gelassen, die würde ich ja dann auch 20x abfragen wenn ich ne Schleife bauen würde.
            öhm, ich meinte auch eine abfrage, du sollst nur, damit du nicht alles ausschreiben muss, die abfrage von einer for schleife zusammen setzten müssen...
            nein?

            Kommentar


            • #7
              sowas halt ..
              PHP-Code:
              $such_arr=array();
              $suchwort="erbsen"// das suchwort
              for ($i=1;$i<=20;$i++)
              {
                  
              $such_arr[]="z".$i." LIKE '%".$suchwort."%'";
              }

              $query_suchwort=implode(" OR ",$such_arr); 

              gruss

              rth
              H I L F E
              GD FreeType Antialising
              Gesuch PHP Entwicklungsumgebung
              ------------------------------------------
              Der Cmabrigde rael tset, sruf whoin du wlilst

              Kommentar


              • #8
                Uff.... und wie packe ich das mit dem such_arr bzw. query_suchwort jetzt in die MYSQL-Abfrage damit MYSQL das auch schluckt ?
                Irgendwie fühle ich mich leicht ein wenig überfordert. Ich hasse es Anfänger zu sein.

                Kommentar


                • #9
                  PHP-Code:
                  $result=mysql("usr_web10_1","SELECT * FROM rezepte WHERE ".$query_suchwort." ORDER BY name ASC"); 
                  rth

                  p.m.

                  sorry es ist einfach zu heiss hier um mehr zu schreiben
                  H I L F E
                  GD FreeType Antialising
                  Gesuch PHP Entwicklungsumgebung
                  ------------------------------------------
                  Der Cmabrigde rael tset, sruf whoin du wlilst

                  Kommentar


                  • #10
                    Ich kann goth nur beipflichten. Zutaten solltest Du unbedingt in einer eignenen 1:n-Tabelle ablegen! Du kommst sonst in Teufels Küche. Stell dir mal vor, Du musst nach einer bestimmten Zutat suchen oder alle Zutaten eines Rezepts wiegen. Das wird ein Riesenaufwand. Und: Ich weiss nicht, ob und wie mysql das intern vielleicht noch optimiert, aber 70x LIKE könnte zu einer massiven Serverauslastung führen. Da dann mal 10 Clients mit derselben Abfrage dran und gute Nacht.

                    Ich würds so machen:

                    Tabelle Rezepte

                    id - int autoincrement
                    name - varchar
                    beschreibung - blob .... usw

                    Tabelle Zutaten

                    id - int autoincrement
                    rezept - int
                    name - varchar
                    menge - int .... usw


                    Zutaten für Rezept Nr. 350 raussuchen:
                    SELECT * FROM zutaten WHERE rezept = 350

                    Rezept Nr. 350 wiegen:
                    SELECT SUM(menge) FROM zutaten WHERE rezept = 350

                    Alle Rezepte mit Zutat "Fliegenpilz" suchen:
                    SELECT DISTINCT rezept FROM zutaten WHERE name LIKE "Fliegenpilz";
                    Zuletzt geändert von pekka; 07.08.2003, 16:44.

                    Kommentar


                    • #11
                      Genau wie Pekka meint ...

                      Code:
                      CREATE TABLE rezepte {
                      	rezID INT(11) NOT NULL,
                      	rezTITLE VARCHAR(255) NOT NULL,
                      	... Keine Ahnung was sonst noch ...
                      	PRIMARY KEY (rezID)
                      );
                      
                      CREATE TABLE zutaten {
                      	rezID INT(11) NOT NULL,
                      	zutNAME VARCHAR(255) NOT NULL,
                      	zutMENGE DOUBLE NOT NULL,
                      	zutME ENUM('Gramm', 'Liter', 'Teelöffel', ... wieder keine Ahnung ...) NOT NULL,
                      	PRIMARY KEY (rezID, zutNAME)
                      );
                      Rezepte rein ... und dann kannst Du schön über 'nen INNER JOIN nach Zutaten suchen ...


                      OffTopic:
                      Hmmnn ... Pekka zu schnell gewesen ...
                      carpe noctem

                      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                      Kommentar


                      • #12
                        1000 Dank, aber so weit drin bin ich in der Materie leider noch nicht.

                        Also hier im Tread konnte ich bis zum vorvorletzten Posting (von robertTheHero) noch gerade folgen, die letzten 2 Postings so weit bin ich aber noch nicht. Werde das später isch er ml optimieren wenn ich das besser kann.

                        Ich habe in der Tat eine Tabelle für die Rezepte. Hat 73 Spalten. Allein für 20 maximal mögliche Zutaten habe ich 60 Spalten verbraucht 20x Mengenangabe, 20x Einheitenangabe der Menge, 20x die eingendliche Zutat.

                        Man sagte mir schon das man, wenn die Tabelle irgendwann mal zig 1000de Rezepte enthält und ich soviele Besucher habe das ständig abfragen laufen, das in 2 Tabellen aufteilen solle damit die Zutaten nur in der ausführlichen suche bzw. bei der eigendlichen vollstädnigen Anzeige eines einzelnen Rezepts abgefragt werden.

                        Für ein paar 100 Rezepte und ein paar Besuchern am Tag(ist ja nur eine kleine Hobby-Page) wird es aber auf sicherl so gehen.

                        Ich habe jetzt eine Abfrage mit 20 LIKE gebaut und die ist ohne merkbare Verzögerung da.

                        Soweit vielen Dank.
                        André

                        Kommentar


                        • #13
                          Ich seh das normalerweise auch so: Beim ersten Projekt und niedrigen Anforderungen einfach mal drauf loszuarbeiten. In diesem Fall würd ich aber ganz arg empfehlen, dich in die Materie von 1:n-Verknüpfungen einzuarbeiten, auch wenn das erstmal den Arbeitsfluß hemmt, weil Du nämlich sonst mit einem Mega-Aufwand ein System erstellst, das du nachher wieder komplett umschmeißen musst.

                          Meine 2 cents... wie Dus letztendlich machst ist deine Sache

                          Kommentar

                          Lädt...
                          X