In der Datenbank suchen



  • Ich habe eine MySQL-Datenbank und einige Spalten bestehen aus VARCHARs. Okay nun will ich in diesen Spalten suchen können. Dafür gibt es ja die MATCH-AGAINST Syntax. Das geht ja normalerweise zB so:

    SELECT * FROM table_name WHERE MATCH(column_name) AGAINST ( '+suchwort' IN BOOLEAN MODE);

    Das Problem bei der Sache: MySQL findet nur exakt das Wort "suchwort" innerhalb einer Spalte. Nicht aber zB "abcsuchwortdef". Nun kann man ja den Wildcard Character "*" benutzen

    SELECT * FROM table_name WHERE MATCH(column_name) AGAINST ( '+suchwort*' IN BOOLEAN MODE);

    Dann findet MySQL wenigsten Wörter wie "suchwertabcdef". Aber Wörter wie "abcsuchwortdef" findet es immer noch nicht. Eine Modifikation der Abfrage zu:

    SELECT * FROM table_name WHERE MATCH(column_name) AGAINST ( '+*suchwort*' IN BOOLEAN MODE);

    funktioniert nicht. Mittels regulärer Ausdrücke würde "abcsuchwortdef" aber gematched werden. Kann man das irgendwie so innerhalb der Datenbank lösen?



  • Schon mal LIKE versucht.



  • Unix-Tom schrieb:

    Schon mal LIKE versucht.

    Richtig. Mit LIKE erhälst du allerdings auch nur genau das was du suchst. Um etwas freier zu suchen kannst du den %-Operator nutzen.

    SELECT Beispiel FROM Tabelle LIKE 'Suchbegriff'; //genaue Suche
    SELECT Beispiel FROM Tabelle LIKE '%Suchbegriff'; //enthält "Suchbegriff" am Ende des Ergenis
    SELECT Beispiel FROM Tabelle LIKE 'Suchbegriff%'; //enthält "Suchbegriff" am Anfang des Ergenis
    SELECT Beispiel FROM Tabelle LIKE '%Suchbegriff%'; //enthält "Suchbegriff" irgendwo im Ergebnis
    


  • Das Problem an "LIKE" ist halt, das der SQL im Verhältnis relativ lange braucht.



  • merlot schrieb:

    Unix-Tom schrieb:

    Schon mal LIKE versucht.

    Richtig. Mit LIKE erhälst du allerdings auch nur genau das was du suchst. Um etwas freier zu suchen kannst du den %-Operator nutzen.

    SELECT Beispiel FROM Tabelle LIKE 'Suchbegriff'; //genaue Suche
    SELECT Beispiel FROM Tabelle LIKE '%Suchbegriff'; //enthält "Suchbegriff" am Ende des Ergenis
    SELECT Beispiel FROM Tabelle LIKE 'Suchbegriff%'; //enthält "Suchbegriff" am Anfang des Ergenis
    SELECT Beispiel FROM Tabelle LIKE '%Suchbegriff%'; //enthält "Suchbegriff" irgendwo im Ergebnis
    
    SELECT * FROM Tabelle WHERE Spalte LIKE '%Suchbegriff%'
    

    So langsam ist es auch nicht.


Anmelden zum Antworten