オプションを選択して異なる製品をフィルタリングすることに関してこの質問がありました。そのクエリはここで解決されました:Filter products by options。複数の結合を使用したページネーションカウントクエリ
私の問題は、ページングのカウントクエリになりました。たとえば、このクエリは1
SELECT COUNT(DISTINCT p.id) AS number
FROM products p
LEFT JOIN product_categories pc ON p.id = pc.product_id
LEFT JOIN product_images pi ON p.id = pi.product_id
LEFT JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1
AND po.option_id IN(1)
AND p.main_price BETWEEN 5250.00 AND 14000.00
GROUP BY(p.id)
HAVING COUNT(DISTINCT po.option_id) = 1
のカウントが37行を返しますが、私はDISTINCT削除する場合:
SELECT COUNT(p.id) AS number
FROM products p
LEFT JOIN product_categories pc ON p.id = pc.product_id
LEFT JOIN product_images pi ON p.id = pi.product_id
LEFT JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1
AND po.option_id IN(1)
AND p.main_price BETWEEN 5250.00 AND 14000.00
GROUP BY(p.id)
HAVING COUNT(DISTINCT po.option_id) = 1
をこれは、混合番号の37行を返します。
何が間違っていますか?私はこの結果セットの追加カウントを実行することでこれを達成することができますが、私はそれが正しい解決策ではないと思いますか?
また、以前の質問で示唆したように、私はDISTINCTを必要とすべきではないと言われました。そのためにクエリには問題があります。何が問題なのか教えていただけますか?
あなたの質問は何ですか? 'GROUP BY(p.id)'を使うと37個の 'p.id'があるので37行を返します。これらのidには 'option_id'というものが1つしかありません。 –