次のクエリは、20行に制限された結果を返します。フィルタID 6が適用されていません。HAVINGを使用して合計行を取得します。
SELECT p.id, p.description
FROM product p
LEFT JOIN product_filter pf
ON pf.product_id = p.id
WHERE p.status = TRUE
GROUP BY p.id
HAVING SUM(pf.filter_id = '6') = 0
ORDER BY p.description ASC
LIMIT 0, 20
これはうまく動作しますが、同じ条件の行の数を数えたいと思います。
SELECT COUNT(DISTINCT p.id) AS total
FROM product p
LEFT JOIN product_filter pf
ON pf.product_id = p.id
WHERE p.status = TRUE
HAVING SUM(pf.filter_id = 6) = 0
このクエリはゼロの結果を返します。
EDIT:要求されたとして、SQLFiddleより詳細な方法で問題を表示するのに役立ちます。
あなたは明確な取り外しでそれを試してみましたか? –
テーブル構造とサンプルデータはどこにありますか?あなたがより良い答えを提供するとき –
@ RyanGadsdon、はいと私は同じ動作、結果を取得します。 – Linesofcode