我们正常情况在进行数据分页时一般会通过count查询总条数,limit查询当前页数据,完成数据数据分页。今天学习的是如何一次性查询完成,这是从wordpress中学习到的。先看看下面的SQL:
代码语言:javascript复制SELECT
SQL_CALC_FOUND_ROWS
wp_posts.ID
FROM
wp_posts
LEFT JOIN wp_term_relationships ON ( wp_posts.ID = wp_term_relationships.object_id )
WHERE
1 = 1
AND ( wp_term_relationships.term_taxonomy_id IN ( 2 ) )
AND ((
wp_posts.post_type = 'post'
AND ( wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private' )))
GROUP BY
wp_posts.ID
ORDER BY
wp_posts.post_date DESC
LIMIT 0,
10;
SELECT FOUND_ROWS();
分页输出数据:
代码语言:javascript复制678458
678457
678456
678455
678454
678453
678452
678451
678450
678449
查询条数输出数据:67w数据
代码语言:javascript复制678385
该查询语句从wp_posts表中选取了wp_posts.ID这一列,并通过LEFT JOIN与wp_term_relationships表进行关联。查询条件包括:term_taxonomy_id为2、post_type为'post'且post_status为'publish'或'private'。GROUP BY子句将结果按照wp_posts.ID进行分组,ORDER BY子句按照wp_posts.post_date降序排序。LIMIT子句指定了返回结果的偏移量0和数量10。
注意,通过使用SQL_CALC_FOUND_ROWS,该查询语句会同时计算出满足条件的记录总数,可以通过执行SELECT FOUND_ROWS()获取这个总记录数。