Suche über mehrere Felder

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

  • Suche über mehrere Felder

    Hallo Leute,

    ich soll eine Suche über mehrere Tabellenfelder basteln und stoße dabei auf ernsthafte Probleme. Bin da jetzt schon mehrere Stunden mit beschäftigt, aber komm zu keinem echten Ergebnis.

    Ich suche eine Möglichkeit für folgende Suchanforderung:
    Seien a,b,c,d Teilwörter.
    Suche nach "a b c d" soll Einträge finden, deren Bezeichnung und Hersteller und Kategorie (und Kommentar) einen oder mehrere dieser Strings enthält.

    Ich brauche also entweder eine Zauber-MySQL-Abfrage oder irgendwas in PHP, was mir diese Abfrage zurechtbastelt.
    Begonnen habe ich mit Bezeichnung und Hersteller, um einen Ansatz zu finden.

    Ich habe eine Monster-Verschleifung gebastelt, die mir beinahe die richtige Abfrage bastelt. (siehe unten)
    eigentlich fehlt (glaube ich) "nur noch" das richtige aufrufen der einzelnen Teilwörter. Zur Zeit werden immer a,b,c ausgegeben. Es soll aber a,b,c – b,c,a – c,a,b ausgegeben werden. Vielleicht hab ich einfach zu lange davor gesessen... kann mir jemand auf die Sprünge helfen?

    Am liebsten mit der erwähnten Zauberformel, aber über einen Tip meinen Code fertigzustellen (oder zu vereinfachen) wäre ich natürlich auch glücklich!

    PHP-Code:
    $suchwoerter = array ("a","b","c");
    $suche "";
    $anzahl count($suchwoerter);
    $counter 0;

        for (
    $t=0$t<=$anzahl$t++){
            
    $hilfscounter=0;
            
    $durchlauf=0;
            
    $a 0;
            for (
    $zeichenzaehler=0;$zeichenzaehler<$anzahl;$zeichenzaehler++){
                for(
    $i=0$i<$anzahl-$counter$i++){
                    if (
    $hilfscounter >= $anzahl) {
                        
    $hilfscounter 0;
                    }
                    
    $suche .= ($i == 0) ? " OR" "AND";
                    
    $suche .= " bezeichnung LIKE '%".$suchwoerter[$hilfscounter]."%' ";
                    
    $hilfscounter++;
                }
                
    $suche .= "&nbsp;&nbsp;&nbsp; ";
                for(
    $j=0$j<$counter$j++){
                    if (
    $hilfscounter>=$anzahl){
                        
    $hilfscounter=0;
                    }
                    else 
    $ausgabe $hilfscounter;
                    
    $suche .= ($hilfscounter==0) ? " OR""AND";
                    
    $suche .= " hersteller LIKE '%".$suchwoerter[$hilfscounter]."%' ";
                    
    $hilfscounter++;
                }
            }
            
    $counter++;
        }

    echo 
    str_replace ("  ""<br>",$suche); 
    Vielen Dank!

  • #2
    Was machst Du da??
    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
      Ist das 'ne Frage, oder willst du mir nur sagen, dass man es anders machen soll?
      Letzteres habe ich mir zwar auch selbst schon gedacht, aber danke trotzdem :/

      Kommentar


      • #4
        Re: Suche über mehrere Felder

        Original geschrieben von skanto
        Seien a,b,c,d Teilwörter.
        Suche nach "a b c d" soll Einträge finden, deren Bezeichnung und Hersteller und Kategorie (und Kommentar) einen oder mehrere dieser Strings enthält.
        Eine beliebige Teilmenge von {a, b, c, d} soll in einer beliebigen Teilmenge von {Bezeichnung, Hersteller, Kategorie, Kommentar} vorkommen.
        Also wären z.B. folgende Datensätze erwünschte Treffer:
        1: (Bezeichnung|Hersteller|Kategorie|Kommentar) = 'xaxbxcxdx'
        3: Bezeichnung = 'xaxbx', Hersteller = 'xcxdx'
        3: Hersteller = 'axcx', Kategorie = 'xdbx'
        4: Bezeichnung = 'xdx', Hersteller = 'xbx', Kategorie = 'xax', Kommentar = 'xcx'
        Habe ich das richtig verstanden?

        Dann würde ich die vier Spalten in einer Query zu einem langen String verknüpfen und mit LIKE nach a, b, c und d suchen.

        SELECT *, CONCAT(Bezeichnung, Hersteller, Kategorie, Kommentar) AS s
        FROM tabelle
        WHERE s LIKE '%a% AND s LIKE '%b%' and s LIKE '%c%' AND s LIKE '%d%'

        (Ungetestet und falls es überhaupt funktioniert, dann ist es sicher nicht der schnellste Weg.)

        Kommentar


        • #5
          Das wäre genau das, was ich mir wünsche!
          Es liefert aber leider, leider nur ein "Unknown column 's' in 'where clause'".

          Kommentar


          • #6
            Re: Re: Suche über mehrere Felder

            Und so?

            SELECT *
            FROM tabelle
            WHERE CONCAT(Bezeichnung, Hersteller, Kategorie, Kommentar) LIKE '%a%
            AND CONCAT(Bezeichnung, Hersteller, Kategorie, Kommentar) LIKE '%b%'
            AND CONCAT(Bezeichnung, Hersteller, Kategorie, Kommentar) LIKE '%c%'
            AND CONCAT(Bezeichnung, Hersteller, Kategorie, Kommentar) LIKE '%d%'

            Kommentar


            • #7
              OffTopic:
              du magst copy and paste sehr oder??


              wie wärs wenn du s durch denn spalten-name ersetzt in dem du suchst??

              also
              WHERE {spalte} LIKE '%a% AND {spalte} LIKE '%b%' and {spalte} LIKE '%c%' AND {spalte} LIKE '%d%'

              trotzdem ist das nicht die schnellste möglichkeit.
              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

              Kommentar


              • #8
                So klappt's tatsächlich!
                Das war die lang ersehnte Zauberformel
                Habt Dank!

                Kommentar

                Lädt...
                X