Suchtext in MySQL bearbeiten

prof.nixblick

Neuer Benutzer
Beiträge
1
Moinsen

Folgendes Problem: meine Volltextsuche soll Sätze aus der Datenbank bereits gekürzt ausgeben. Teilweise funktioniert es auch aber eben nur teilweise.

Bsp: der Text in der DB
"Das ist wieder ein Test um zu testen! Diesmal wird alles für die Volltextsuche fertig gemacht... P.S. hier noch etwas Musik https://*soundcloud.com/user2954159"

Die Suche ist Case Insensitive, Zeilenumbrüche werden erst später durch PHP entfernt. Der Stern ist da damit die URL nicht umgewandelt wird und existiert in meiner DB nicht!

der Suchtext
"wird alles für die"

SQL
SUBSTRING_INDEX(SUBSTRING(`posts`.`post` FROM LOCATE('".$suchwort."', `posts`.`post`)) , ' ', 10)

dieser gibt

"wird alles für die Volltextsuche fertig gemacht... P.S. hier noch etwas"

aus. Soweit ist das Okay, nur hätte ich gerne 3-4 Wörter mehr am Anfang.

Also habe ich es mit REVERSE versucht

REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING(`posts`.`post` FROM LOCATE('".$suchwort."', `posts`.`post`))) , ' ', -10))

dieser gibt

"wird alles für die Volltextsuche fertig gemacht... P.S. hier noch etwas"

also kein Unterschied. Also habe ich mir noch einen zurecht gefummelt

SUBSTR(`posts`.`post`, LOCATE('".$suchwort."', `posts`.`post`) - 20, LOCATE('".$suchwort."', `posts`.`post`) + 20)
dieser gibt

"testen! Diesmal wird alles für die Volltextsuche fertig gemacht..."

dies ist soweit okay! Nur wenn ich jetzt das Suchwort in "wieder ein Test" ändere, gibt er folgendes aus:

"ser2954159"

Kurzum, ich bin nicht in der Lage, das Suchwort/Satz + 3-4 Wörter am Anfang und am Ende auszugeben.

Kann mir da jemand helfen?


Warum ich das mit SQL haben will? Weil es performanter ist wenn ich 50 Datensätze pro Seite ausgebe die bereits durch SQL/MySQL bearbeitet wurden als wenn ich das anschließend noch mit PHP mache.
 
Werbung:
Werbung:
Ich würde vermuten das deine Abfrage immer dann scheitert, wenn nicht genügend Wörter/Zeichen vor deinem Searchstring vorhanden sind. Das könnte man noch mit CASE Abfangen und in dem Fall einfach alles bis zum Suchtext ausgeben.

Das gleiche müsste im Umkehrschluss auch bei einem Treffer am Ende des Textes mit zusätzlichen Wörtern/Zeichen dahinter auftreten.
 
Zurück
Oben