phpbar.de logo

Mailinglisten-Archive

Wie gestaltet man diese Abfrage ?

Wie gestaltet man diese Abfrage ?

Christoph 'Leo' Weißenborn chw-le at gmx.de
Mit Okt 19 16:49:00 CEST 2005


Hallo,

das Problem läßt sich nicht trivial lösen.
Eine Lösung benutzt Subqueries, die nur ab MySQL 5 unterstützt werden. Eine
andere Lösung würde über eine Middelware realisiert, die Annahmen über die
Anzahl der zu testenden Ausdrücke macht (bei "Hallo Welt" sind es 2) und dann
eine passende Query "zusammenschreibt".
Letzteres läuft bei 2 Suchbegriffen mit einem Self-Join und für jeden weiteren
Begriff ein weiterer Self-Join. Allgemein geht das jedoch nicht.

Mein Versuch für 3:
SELECT t1.benutzer_id, t1.suchbegriff, t2.suchbegriff, t3.suchbegriff
  FROM tbl_suchbegriffe t1, tbl_suchbegriffe t2, tbl_suchbegriffe t3
 WHERE t1.benutzer_id = <gesuchte_id>
   AND t1.suchbegriff = <gesuchter_begriff_1>
   AND t2.benutzer_id = t1.benutzer_id
   AND t2.suchbegriff = <gesuchter_begriff_2>
   AND t3.benutzer_id = t1.benutzer_id
   AND t3.suchbegriff = <gesuchter_begriff_3>
Mit nem Index auf (Benutzer_id,suchbegriff) sollte die Abfrage auch zügig sein.

Zu den Subqueries siehe
http://dev.mysql.com/doc/refman/5.0/en/any-in-some-subqueries.html und
http://dev.mysql.com/doc/refman/5.0/en/all-subqueries.html

Leider bietet MySQL keinen einfachen Operator wie CONTAIN(S) für Mengen an.
So daß es glaub ich auch auf die Lösung mit einem x-fachen Self-Join
hinausläuft.

Gruß,
 Christoph
-- 
Fingerprint=65B7 73B6 5969 AC2B 4572 39A2 0DBC DAC1 3D6A 45B7

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.

-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive