thesilencer5
15-03-2007, 16:56
Hi,
ich habe ein Problem mit MATCH und finde keine Lösung. Ich suche in einer Tabelle nach bestimmten Keywords.
Wenn ich z.B. nach "Super" suche, sollen auch alle Einträge mit "superdoll", "Superduper" etc ausgegeben werden.
Ich dachte, hinter den Suchbegriff müsste hierzu ein * eingetragen werden, es funktioniert aber nicht. Hier meine Abfrage:
$query_listing3 = "SELECT * FROM main_data WHERE MATCH(keywords) AGAINST('$suchen*')"; Es werden immer nur Einträge ausgegeben, bei denen $suchen genau mit einem der Keywords übereinstimmt.
Wo liegt hier der Fehler?
Danke im Voraus
Warum versuchst du es nciht mal mit einem
$query_listing3 = "SELECT * FROM main_data WHERE keywords LIKE '$suchen%'";
thesilencer5
15-03-2007, 17:03
@ case
weil ich eine Volltextsuche machen möchte, die auch in mehreren Einträgen nach mehreren Suchbegriffen suchen kann.
Original geschrieben von thesilencer5
Wenn ich z.B. nach "Super" suche, sollen auch alle Einträge mit "superdoll", "Superduper" etc ausgegeben werden.
Ich dachte, hinter den Suchbegriff müsste hierzu ein * eingetragen werden, es funktioniert aber nicht.
Dann musst du eine Volltextsuche IN BOOLEAN MODE nutzen.
ich denke mal, dass er nicht umsonst die volltextsuche verwendet, oder doch?
http://dev.mysql.com/doc/refman/5.1/de/fulltext-boolean.html
thesilencer5
15-03-2007, 17:13
Mit Boolean Mode ändert sich auch nichts.
Laut MySQL Handbuch dient doch ein * als Platzhalter. Warum macht er nicht was er soll?
Dann zeig mal die query und nicht den generierenden php-code.
thesilencer5
15-03-2007, 17:15
Query:
SELECT * FROM main_data WHERE MATCH(keywords) AGAINST('superdu*')
Müsste zumindest den Eintrag mit dem Keyword "superduper" bringen, liefert aber ein leeres Ergebnis.
Original geschrieben von thesilencer5
Query:
SELECT * FROM main_data WHERE MATCH(keywords) AGAINST('superdu*')
Und wo sagst du da, dass du den Boolean Mode verwenden möchtest?
Hast du zu dem Stichwort überhaupt mal nachgelesen?
thesilencer5
15-03-2007, 17:19
@ wahsaga
SELECT * FROM main_data WHERE MATCH(keywords) AGAINST('superdu*' IN BOOLEAN MODE)
Bringt aber auch ein leeres Ergebnis
Kann es sein dass die Suche einfach Case Sensitive ist??
also das mit
SELECT * FROM main_data WHERE MATCH(keywords) AGAINST('superdu*')
zwar superduper aber nicht Superduper gerunden wird ?
thesilencer5
15-03-2007, 17:22
@case
Nein, ist nicht case sensitive...
thesilencer5
15-03-2007, 17:41
Kann das irgendwie an der Tabelle liegen, oder der MySQL Version?
Ich habe die 4.1.14 laufen.