Alexander (HH): MySQL : mit regulären Ausdrücken Wörter für Buchstaben suchen

Beitrag lesen

Moin Moin!

Deine Suche ist auf jeden Fall sehr teuer. Pattern Matching ist schon nicht billig, und dann noch ein nicht vermeidbarer Full Table Scan. Und warum suchst Du nach Worten der Länge 0? Ich würde 1 als Mindestlänge angeben.

Versuche, mit Vorberechnung zu arbeiten.

Um alle Anagramme eines Wortes zu finden, könntest Du die Buchstaben in den Worten in der DB alphabetisch sortieren, und über die "sortierten Wörter" suchen. Der Suchbegriff muß natürlich auch buchstabenweise sortiert werden.

word   | sorted_word
-------+--------------------
gehend | eedghn
hegend | eedghn
gehen  | eeghn
hege   | eegh
eggen  | eeggn
eck    | cek

SELECT word FROM word_table WHERE sorted_word='eedghn'

Buchstabenhäufigkeiten und optionale Buchstaben kannst Du wieder über RegExps erschlagen:

SELECT word FROM word_table WHERE word REGEXP '^e{1,2}dghn$'
(Ein oder zwei 'e's)

SELECT word FROM word_table WHERE word REGEXP '^e+d?g?hn$'
(Mindestens ein 'e', 'd' und 'g' optional)

Das Umlautproblem dürfte auf UTF8-Codierung zurückzuführen sein, von der MySQL (oder die RE-Engine) nichts weiß. Auch wenn Du ein Zeichen 'Ö' in die DB schreibst und von dort wieder liest, sieht MySQL stattdessen zwei Zeichen 'Ö'. Die Kommunikation mit MySQL und die Speicherung in MySQL müssen einheitlich in UTF-8 oder ISO-8859-1 sein. Gemischt geht es nicht.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".