ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
557
557
EMPFEHLEN
-
Hallo,
ich bastle an einer recht simplen Suchfunktion für eine MySQL-Tabelle. Die Inhalte werden überwiegend mit dem Editor TinyMCE verfasst, der die Angewohnheit hat, Sonderzeichen wie Umlaute in ihre entsprechenden Entities umzuwandeln, bevor sie gespeichert werden.
Damit eine Suche nach einem Wort, welches ein Sonderzeichen enthält, erfolgreich verläuft, wandle ich die Zeichen der Suchanfrage ebenfalls in die Entities um. Nun scheint sich MySQL allerdings an genau diesen Zeichen zu stören - wenn ich beispielsweise nach einem Wort mit Umlaut suche, erscheinen viele Suchergebnisse, die dieses Wort überhaupt nicht enthalten.
Meine Datenbankabfrage sieht etwa so aus:
Code :1
SELECT * FROM page WHERE MATCH (page_keywords, page_description, page_teaser, page_headline, page_title, page_text1) AGAINST ('%".$searchinput."%')
Hat jemand eine Idee, warum MySQL sich an diesen Zeichen stört, und wie ich das Problem lösen kann?
Viele Grüße
Michael
-
Du könntest die Sonderzeichen für die Suche mit Replace umwandeln.
Code :1
REPLACE(`page_title`, 'ä', 'ä')
-
Du meinst ich soll dauerhaft alle Sonderzeichen in der Datenbank umwandeln? Das ist leider kaum machbar, da die Inhalte der Seite ständig aktualisiert werden. TinyMCE würde die Zeichen in neuen Einträgen ja wieder als Entities speichern, ebenso Inhalte, die nach meinem Umwandeln erneut bearbeitet werden. Um das zu vermeiden, müsste ich also am Tiny rumpfuschen, oder an den Funktionen, die die Einträge speichern. Das ist mir beides zu riskant ... geht es nicht einfacher?
-
Moin,
der Joker % ist bei der Volltextsuche nicht vorgesehen, würd ich meinen.
-
Ups, danke für den Hinweis. Kommt davon, wenn man zu faul zum tippen ist und blind aus einem anderen Query kopiert ...
An den Suchergebnissen ändert das aber leider nichts.
-
Hab mal kurz ein wenig herumprobiert, es scheint wohl, dass allein der Umlaut in seiner Umschreibung schon ausreicht, um eine Relevanz>0 zu erzeugen, bei allen Datensätzen, die diese Umschreibung enthalten.
Probiers mal so:
Code :1 2 3
"SELECT * FROM page WHERE MATCH (page_keywords, page_description, page_teaser, page_headline, page_title, page_text1) AGAINST ('\"".$searchinput."\"' IN BOOLEAN MODE)"
-
Tausend Dank, Sven! Mit Deiner Abfrage läuft alles so, wie es soll.
Ähnliche Themen
-
MYSQL abfrage durch Formular
Von Manuel324 im Forum PHPAntworten: 8Letzter Beitrag: 15.05.09, 16:24 -
Html-Form zu Java Applet Kommunikation gestört
Von AGSzabo im Forum JavaAntworten: 2Letzter Beitrag: 14.11.08, 17:08 -
Thickbox wird durch andere Scripte gestört
Von qde im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 12.11.08, 23:10 -
MySQL: Abfrage auf 2 Tabellen durch join
Von Saskia21 im Forum Relationale DatenbanksystemeAntworten: 8Letzter Beitrag: 14.03.08, 14:38 -
Durch Auswahl im <select> MySQL Abfrage starten!
Von CikoNo1 im Forum PHPAntworten: 5Letzter Beitrag: 28.10.05, 11:26





Zitieren
Login





