在我的應用程序(自從)我不得不修改的查詢看起來像這樣:MySQL的計數問題
SELECT sql_cache distinct p.products_image,
p.products_subimage1,
pd.products_name,
p.products_quantity,
p.products_model,
p.products_ordered,
p.products_id,
p.products_price,
p.products_date_added,
p.products_weight,
p.products_length,
p.products_width,
p.products_height,
p.products_tax_class_id,
p.products_status,
IF(s.status, s.specials_new_products_price, NULL) AS specials_new_products_price,
IF(s.status, s.specials_new_products_price, p.products_price) AS final_price
FROM products p
LEFT JOIN specials s
ON p.products_id = s.products_id
LEFT JOIN products_to_categories p2c
ON p.products_id=p2c.products_id
LEFT JOIN products_description pd
ON p.products_id=pd.products_id
INNER JOIN filter_association_products fap
ON p.products_id =fap.products_id
LEFT JOIN products_attributes pa
ON p.products_id = pa.products_id
WHERE p.products_status = '1'
AND date_sub(curdate(),INTERVAL 3000 day) <= p.products_date_added
AND find_in_set(fap.filter_id,'126, 130')
ORDER BY p.products_date_added DESC,
pd.products_name
就這樣結束,對於準確的結果:
AND fap.filter_id IN (126, 130)
GROUP BY p.products_id
HAVING COUNT(DISTINCT fap.filter_id) = 2;
我有問題現在是有以下查詢使用這個新的查詢,並給我錯誤的結果。
SELECT COUNT(DISTINCT p.products_id) AS total
FROM products p
LEFT JOIN specials s ON p.products_id = s.products_id
LEFT JOIN products_to_categories p2c
ON p.products_id = p2c.products_id
LEFT JOIN products_description pd
ON p.products_id = pd.products_id
INNER JOIN filter_association_products fap ON p.products_id = fap.products_id
LEFT JOIN products_attributes pa
ON p.products_id = pa.products_id
WHERE p.products_status = '1'
AND DATE_SUB(CURDATE() , INTERVAL 3000 DAY) <= p.products_date_added
AND fap.filter_id IN (126, 130)
GROUP BY p.products_id
HAVING COUNT(DISTINCT fap.filter_id) =2
ORDER BY p.products_date_added DESC , pd.products_name
而不是給1行的所有product_id
S IN原始查詢的計數的結果是,現在給多行的結果(相同數量的行爲預期的總產品數)與它們中的每一個都是數字1。 主要問題似乎是GROUP BY p.products_id HAVING COUNT(DISTINCT fap.filter_id) =2
是否有任何方法來修改原始查詢,以便在仍使用AND fap.filter_id IN (126, 130)
時計數查詢將正常工作?
您需要使用一個子查詢來獲得你想要的結果。 –