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 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 |
#2 · Zasláno: 23. 9. 2013, 22:19:43
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 |
||
Časová prodleva: 11 let
|
0