Moin Moin!
Mal wieder ein Wald-und-Bäume-Problem:
Ich suche in einer Tabelle voller Benutzer-Daten über mehrere Spalten nach mehreren Wortfragmenten, und möchte die Datensätze zuerst zurückbekommen, für die die meisten Übereinstimmungen vorhanden sind. Datenbank ist im Moment PostgreSQL 8.2, soll später aber auch mit anderen Datenbanken funktionieren. PostgreSQLs ILIKE-Operator ist ein case-insensitives LIKE, für andere SQL-Dialekte wird ggf. ein anderer Operator eingesetzt. Der letzte Ausweg wäre, die Datensätze in der Anwendung nochmal zu vergleichen und zu sortieren, aber das erscheint mir wenig elegant.
SELECT
* -- in Wirklichkeit eine lange Spaltenliste --
FROM
users
WHERE
account ILIKE '%foo%' OR account ILIKE '%bar%' OR account ILIKE '%baz%'
OR
firstname ILIKE '%foo%' OR firstname ILIKE '%bar%' OR firstname ILIKE '%baz%'
OR
lastname ILIKE '%foo%' OR lastname ILIKE '%bar%' OR lastname ILIKE '%baz%'
OR
email ILIKE '%foo%' OR email ILIKE '%bar%' OR email ILIKE '%baz%'
ORDER BY
NUMBER_OF_MATCHES_IN_WHERE() -- HILFE! Die Funktion gibt's nicht. ;-) --
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".