springsoft.pl

13-09-2010

INTERSECT w MySQL - część wspólna zbiorów


Kodując ostatnio , chyba ze zmęczenia napotkałem na dość dziwną potrzebę. Problem trywialny, pojawił się przy implementacji wyszukiwarki. Chodziło o wyznaczenie części wspólnej zbiorów. Po krótkim googlowaniu wyszło, MySQL nie ma INTERSECT, ale czy to oznacza że nie można w nim tego zrealizować ?

Kategoria:Projekty 
Napisał: admin

Da się oczywiście, dość długo mi zajęło aby wpaść na ten pomysł. Może dlatego że proste pomysły są najtrudniejsze do wymyślenia. Podaję gotowe rozwiązanie.

 

SELECT DISTINCT c_id FROM `c_services` WHERE `service_id` =1 AND value LIKE '%'

AND c_id IN ( SELECT DISTINCT c_id FROM `c_services` WHERE `service_id` =2 AND value LIKE '%'

AND c_id IN ( ... ) )  ..

 

Dynamicznie generując w dowolnym języku programowania zapytanie SQL które parokrotnie się zagnieżdża , jesteśmy w stanie rozwiązać problem naszej zaawansowanej wyszukiwarki. Rozwiązanie problemu szukania części wspólnej chociażby 10 zbiorów jest proste i przyjemne. Algorytm ma do Siebie to że jeżeli już na początkowym etapie działania nie znajdzie części wspólnych początkowych zbiorów, to całe dalsze poszukiwanie nie ma sensu :-)

 

komentarze

 Dodaj komentarz  
pseudonim : tytuł : email :

powiadom o odpowiedźi