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.