Hallo,
für die OR-Verknüpfung bei der DB-Abfrage habe ich
REGEXP "(^| )the($| )|(^| )who($| )"
REGEXP "(^| )the($| )|(^| )roling($| )|(^| )stones($| )"
gewählt.
Bei LIKE habe ich die Problematik, dass '%who%' auch alle Datensätze findet, bei denen der Suchbegriff Teilwort des Datensatzes ist. Bei '% who %' wird der Begriff zwar als einzelnes Wort, aber nicht mehr am Anfang oder Ende des Datenfeldes gefunden. Deshaln nutze ich jetzt die reguläre Abfrageform.
Für ODER-Verknüpfungen brauche ich so auch nur die Teilworte wie oben gezeigt zu verbinden um das MySQL-Statement zu erzeugen.
Leider findet der Ausdruck so aber zu viele Einträge in der DB. Die ODER-Form soll also nur genutzt werden wenn UND nichts findet.
Die Suchfelder sind zwar alle Volltext-Indiziert aber die binäre Suche findet bei mir irgendwie keine Datensätze, ich weiß nicht was ich da falsch mache. Außerdem muss man den Nutzer erst + - "" erklären.
Für die AND-Suche benötige ich also einen Reguläre Ausdrucksform, die UND-Verknüpft mehre Worte '(^| )wort($| )' in beliebiger Reihenfolge innerhalb eines Datensatzes findet.
Eine Abfrage der Form a&b|b&a für zwei Begriffe ist noch einfach. Drei Worte sind mit a&b&c|a&c&b|b&a&c|b&c&a|c&a&b|c&b&a auch noch zu schaffen. aber wenn jemand mehr Worte in die Suche eingibt entsteht so ein unüberschaubarer Konstrukt. Ich bin mir sicher das es bei Regulären Ausdrücken auch eine elegantere Möglichkeit gibt, eine beliebige Anzahl Wörter in beliebiger Reihenfolge zu finden.
Weiß jemand von Euch hier eine unkomplizierte Variante?
Sonst muss ich für die UND-Verknüpfung wohl doch auf LIKE '%wort%' setzen. Oder kennt vielleicht jemand für das o.g. LIKE-Problem für ganze Wörter, auch am Beginn oder Ende des Datenfeldes eine Alternative?
Ich bedanke mich schon mal für hoffentlich hilfreiche Infos
Hartmut
__
Falls jemand diese Info benötigt:
Ich nutze als Datenbank die zzt. bei 1&1 installiert Version MySQL5.0