編集: 結局のところ、コードは意図したとおりに実行されているようです。それは単なるデバッグの問題でした。邪魔してごめんなさい!
複数のフィルターと JOIN を含む大規模なクエリを実行しています。また、結果をページ分割しているため、クエリが 2 回実行されていました。
SQL_CALC_FOUND_ROWS
クエリを 2 回実行しないように使用しようとしましたが、HAVING
ステートメントでフィルタリングしているため、「having ステートメント」の前にフィルター処理されていない合計を取得しています。元のクエリはカウントに依存しているため、実行する必要がありHAVING
ます。これはひどいことですが、現在、DB構造を変更する権限がありません。
私のSQLのアイデア:
SELECT SQL_CALC_FOUND_ROWS u.id as user_id,
u.full_name as full_name,
u.email as email,
COUNT(stuff) as logs,
FROM
user u
LEFT JOIN
profile u_p on u_p.user_id = u.id
GROUP BY u.id
HAVING logs>5
LIMIT 15
新しい SQL クエリ
SELECT FOUND_ROWS() as total_rows
を実行すると、フィルタリングされたものではなく、全量のu.id
ROWS が取得されます。(これはHAVING
文でのみ発生し、WHERE
句では発生しません)