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.
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.