1

編集: 結局のところ、コードは意図したとおりに実行されているようです。それは単なるデバッグの問題でした。邪魔してごめんなさい!

複数のフィルターと 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.idROWS が取得されます。(これはHAVING文でのみ発生し、WHERE句では発生しません)

4

1 に答える 1

0

結局のところ、コードは意図したとおりに実行されているようです。それは単なるデバッグの問題でした。邪魔してごめんなさい!

于 2016-04-12T13:22:17.037 に答える