Autor Zpráva
astek
Profil
Ahoj,
potřeboval bych poradit s následujícím dotazem:
SELECT p.id_products, p.name, p.description, i.img FROM products AS p 
INNER JOIN image AS i ON i.id_products = p.id_products 
INNER JOIN products_parameters AS pp ON pp.product_id = p.id_products 
WHERE p.id_products IN (
    SELECT DISTINCT pp.product_id AS id FROM products_parameters as pp WHERE pp.parameter_id=110 && pp.value=20
     UNION all
    SELECT DISTINCT pp.product_id AS id FROM products_parameters as pp WHERE pp.parameter_id=109 && pp.value=19
 )
GROUP BY id_products
V podstatě se jedná o spojení 3 tabulek(image,products,products_parameters).
A z tabulky products_parameters potřebuji vybrat záznamy, které mají:
pp.parameter_id=110 && pp.value=20
pp.parameter_id=109 && pp.value=19
Snad jsem vše vysvětlil dostatečně.
Tento dotaz v podstatě funguje, až na to, že bych potřeboval v závorce IN vybrat pouze záznamy, které mají oba SELECT společné.
A tento dotaz je hodně pomalý.
Děkuji za rady a tipy a rady, jak dotaz vylepšit.
Kajman
Profil
Mohlo by pomoci něco jako
SELECT p.id_products,
       p.name,
       p.description,
       i.img
FROM   (SELECT product_id
        FROM   products_parameters
        WHERE  (parameter_id, value) in ((110, 20), (109, 19))
        GROUP  BY product_id
        HAVING Count(DISTINCT parameter_id, value) = 2) pp
       JOIN products AS p
         ON pp.product_id = p.id_products
       JOIN image AS i
         ON i.id_products = p.id_products

S tím, že je vhodný dvousloupcový index (parameter_id, value) na tabulce s parametry.
astek
Profil
-----smazán blábol-----
Tak funguje, jen tam chybělo group by ;-)
děkuji

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: