我有一个我想要优化的查询。我确定这个查询可以改进。
查询结果应返回具有filter_id 22和2且显示“是”的产品数。
SELECT COUNT(product_id) AS Total
FROM kkx_filters_products
LEFT JOIN kkx_products ON product_id = kkx_products.id
WHERE filter_id IN (2,22)
AND kkx_products.display = 'yes'
GROUP BY product_id
HAVING count(product_id) = 2
上述查询返回10230条记录,每条记录的字段为Total,值为2 我想要一个字段为Total且值为10230的结果。
我已经包含了查询中使用的表的结构。
EXPLAIN kkx_filters;
Field Type Null Key Default Extra
id int(11) unsigned NO PRI NULL auto_increment
name varchar(50) NO
EXPLAIN kkx_filters_products;
Field Type Null Key Default Extra
filter_id int(11) NO PRI 0
product_id int(11) NO PRI 0
EXPLAIN kkx_products;
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
title varchar(255) NO
display enum('yes','no') NO yes
答案 0 :(得分:0)
您可以使用以下命令包装查询:
SELECT COUNT(*)
FROM
( yourquery ) AS tmp
但效率不高。而是将products表连接到过滤器表,两次:
SELECT
COUNT(*) AS Total
FROM
kkx_products AS p
JOIN
kkx_filters_products AS f1
ON f1.product_id = p.id
AND f1.filter_id = 2
JOIN
kkx_filters_products AS f2
ON f2.product_id = p.id
AND f2.filter_id = 22
WHERE
p.display = 'yes'