1、问题描述
在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页。但是,当limit遇到order by的时候,可能会出现翻到第二页的时候,竟然又出现了第一页的记录。
具体如下:
SELECT
post_title
,
post_date
FROM
post
WHERE
post_status
= ‘publish’
ORDER BY
view_count desc
LIMIT
5, 5
使用上述SQL查询的时候,很有可能出现和LIMIT 0,5相同的某条记录。而如果使用如下方式,则不会出现重复的情况:
SELECT
*
FROM
post
WHERE
post_status = ‘publish’
ORDER BY
view_count desc
LIMIT
5, 5
但是,由于post表的字段很多,仅仅希望用这两个字段,不想把post_content也查出来。为了解决这个情况,在ORDER BY后面使用了两个排序条件来解决这个问题,如下:
SELECT
post_title
,
post_date
FROM
post
WHERE
post_status
= ‘publish’
ORDER BY
view_count desc,
ID asc