Kerstin: MySQL: LIKE oder MATCH () AGAINST ()

Beitrag lesen

Hallo Leute,

nachdem ich den ganzen Nachmittag überlegt habe, wie ich eine Suche über alle oder besser so gut wie alle Spalten meiner DB-Tabellen realisiere, brauche ich nun ein wenig Hilfe, denn ich grübele noch immer. Wie ich LIKE einsetze, weiß ich ziemlich genau. Allerdings wäre ein Abfrage:
SELECT * FROM tabelle WHERE feld1 LIKE '%suchebegriff%' OR ... OR feld30 LIKE '%$suche%'
ziemlich aufwendig. Deshalb bin ich auf der Suche nach einer anderen weniger aufwendigen Möglichkeit.
Gefunden habe ich dann MATCH() AGAINST () - eine Volltextsuche. Diese würde mit ermöglichen folgende Abfrage zu erstellen:
SELECT * FROM tabelle WHERE MATCH (feld1, ... , feld30) AGAINST ('suchbegriff')
Das ganze mache ich laut Vorlage von http://dev.mysql.com/doc/refman/4.0/de/fulltext-search.html
Das ist natürlich auch in MySQL 5 möglich:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

Die im ersten Link aufgeführte Abfrage
SELECT * FROM artikel WHERE MATCH (titel,artikeltext) AGAINST ('Datenbank');
funktioniert soweit. Nun habe mal probiert anstelle von Datenbank nach MySQL zu suchen. Wenn man sich das vorherige INSERT auf der Seite anguggt, sollte ja was zu finden sein. Ist es aber nicht. D.h. die Abfrage gibt NULL Zeilen zurück. Die Frage an dieser Stelle ist WARUM?
SELECT * FROM artikel WHERE MATCH (titel,artikeltext) AGAINST ('+MySQL' IN BOOLEAN MODE);
gibt die gewünschten Zeilen aus, nämlich alle in denen irgendwie MySQL vorkommt.

Eigentlich müsste doch auch
SELECT * FROM artikel WHERE MATCH (titel,artikeltext) AGAINST ('%my%');
funktionieren. Tut es aber nicht. Das finde ich ziemlich schade.

Nachteil an der ganzen Sache ist, dass nun ein FULLTEXT gesetzt werden muss und dass in MATCH () immer noch alle Tabellenspalten angegeben werden müssen. Kann man dort nicht auch * oder etwas vergleichbares angeben, um damit alle zu meinen? Mein MySQL 5.0.18 sagt jedenfalls NEIN zum *.

Hat jemand schon mehr Erfahrung mit MATCH und LIKE und kann mir ein paar Tipps geben?

Vielen Dank schon mal.
Gruß,
Kerstin