• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[MYSQL] Suchtext in MySQL bearbeiten

dertypdernixkan

New member
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 Suchtext


"wird alles für die"


SQL


HTML:
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


HTML:
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


HTML:
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.
 
Du musst bei dem ersten Index noch prüfen, ob dieser auch wirklich nicht kleiner als 0 ist. Leider funktioniert die MAX Funktion nicht so, wie in anderen Sprachen, deswegen muss man da ein bisschen kreativ sein:
Code:
SUBSTR(`posts`.`post`, (ABS(LOCATE('".$suchwort."', `posts`.`post`) - 20) + LOCATE('".$suchwort."', `posts`.`post`) - 20) / 2, LOCATE('".$suchwort."', `posts`.`post`) + 20)
 
@kkapsner

nein, das funktioniert auch nicht, ich habe es vorläufig über einer preg_match-funktion gelöst, ist zwar noch weit weg von dem was ich will aber sie macht das nötigste, sowohl bei kürzeren als auch bei längeren texten.
 
Ja es hat ja auch funktioniert, nur eben dann, wenn der Text eine bstimmte Länge hat. ist er zu kurz oder zu lang dann versagt es.

Da wäre ich mir nicht so sicher. Vergleiche beide Ansätze, dann hast du belastbare Zahlen.

Ja stimmt, die Aussage von mir war so aus dem Stegreif, SQL ist schneller, ich muss weniger Text durch PHP bearbeiten/prüfen lassen -> sollte schneller und damit performanter sein.
 
Zurück
Oben