Autor Zpráva
FreeWall
Profil *
Zdravim, potřeboval bych poradit s SQL dotazem, který umím do jisté míry sestavit ale je značně pomalý a myslím, že by to mělo jít jednodušeji.

Mám dvě tabulky:
items (item_id,...)
properties (prop_id,...)
items_properties (prop_id, item_id)

Každý item může mít N properties → tyto vztahy ukládam do M:N tabulky items_properties.

Hlavní problém (příklad): Potřebuji vyčíst všechny items, které mají properties 1,7,9.

Dotaz jde sestavit způsobem připojením N joinů:
SELECT t1.item_id FROM items t1
LEFT JOIN items_properties t2 USING(item_id)
LEFT JOIN items_properties t3 USING(item_id)
LEFT JOIN items_properties t4 USING(item_id)
WHERE t2.prop_id = '1' AND
      t3.prop_id = '7' AND
      t4.prop_id = '9'

ale takový způsob je zřejmě neefektivní a potřeboval bych lepší a rychlejší způsob :).

Předem děkuji za pomoc ...
Kajman
Profil
viz. faq

SELECT i.*
FROM   items i
       INNER JOIN (SELECT item_id
                   FROM   items_properties
                   WHERE  prop_id IN ( 1, 7, 9 )
                   GROUP  BY item_id
                   HAVING Count(DISTINCT prop_id) = 3) t USING(item_id)  
FreeWall
Profil *
Kajman:
FAQ mě nenapadl :) chytré řešení :D

díky moc ...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: