Kapitel 5. Anwendungsgebiete von MySQL

Inhaltsverzeichnis
5.1. Wie realisiere ich eine Volltextsuche?
5.2. Wie kann ich beim Sortieren einen bestimmten Wert als erstes/letzes Ausgeben lassen?
5.3. Wie kann ich beim Sortieren eine bestimmte Reihenfolge festlegen?
5.4. Wie kann ich Werte vertauschen (aus 8 mach 5 und umgekehrt)?
5.5. Warum erhalte ich eine Fehlermeldung, wenn ich LOAD DATA LOCAL INFILE verwende?
5.6. Warum funktioniert mein Subselect nicht?
5.7. Wie bekommt man die Zeile mit dem Maximalwert pro Gruppe?

5.1. Wie realisiere ich eine Volltextsuche?

Von Matthias P. Wuerfl

Datenbankmanagementsysteme wie MySQL sind normalerweise nicht für Volltextsuche geeignet. Um eine Volltextsuche (z.B. für eine Website) zu realisieren eignen sich Tools wie ht://dig besser (http://www.htdig.org/). Trotzdem bietet MySQL ab der Version 3.23.23 die Möglichkeit einen Volltextindex anzulegen und damit die Möglichkeit eine entsprechende Suche anzubieten.

...mit MySQL ab Version 3.23.23

Um die Spalte einer Tabelle mit einem solchen Index zu belegen muß das SQL-Statement ALTER TABLE tabellenname ADD FULLTEXT (textpalte) ausgeführt werden, welches einen entsprechenden Wortindex anlegt. Anschliessend kann mit einer Query wie SELECT * FROM tabellenname WHERE MATCH textspalte1 AGAINST 'suchtext' der Index durchsucht werden.

Dieser Wortindex reagiert nur auf ganze Worte, es kann also nicht nach Teilworten oder Wortkombinationen gesucht werden. Die Suche nach "Bauer" findet also nicht "Bauernhof".

Der Ausdruck MATCH a AGAINST b gibt einen Zahlenwert zurück, der die Relevanz des gefundenen Datensatzes wiedergibt, er kann also auch im SELECT-Teil eines SQL- Statements sinnvoll eingesetzt werden. Im ORDER BY-Teil des Statements braucht er nicht vorzukommen, denn MySQL sortiert automatisch nach Relevanz, wenn im WHERE-Teil der Volltextindex abgefragt wird.

SELECT   * FROM tabellenname
WHERE    MATCH textspalte AGAINST ('wort1 wort2')

...gibt alle Datensätze aus, in denen eines der Suchworter in der textspalte vorkommt - nach Relevanz absteigend sortiert.

Versionen älter als 3.23.23

Hat man eine MySQL-Version älter als 3.23.23, dann kann man auch eine Volltextsuche realisieren, jedoch geht diese dann wesentlich langsamer vonstatten, da MySQL hier nicht den Index benutzen kann.

SELECT   * FROM tabellenname
WHERE    textspalte LIKE '%wort1%'
OR       textspalte LIKE '%wort2%'

Das Prozentzeichen hat im LIKE- Statement von SQL die Funktion, die man in anderen Situationen auch vom Sternchen (*) her kennt. Diese Query findet auch Teilwörter. Die Suche nach "Bauer" findet also auch "Bauernhof".