以下是一个楼主写项目时一个很普通的sql
SELECT
api.id
FROM
auction_product_instance api
WHERE
api.`status` = 1
ORDER BY
api.`bid_num` DESC
结果集如下:
3522
3509
3516
3541
3524
3523
3521
3520
3519
3518
然后再以上的sql上加一个分页limit,再看效果
SELECT
api.id
FROM
auction_product_instance api
WHERE
api.`status` = 1
ORDER BY
api.`bid_num` DESC
limit 10
结果集如下:
3522
3509
3507
3508
3510
3511
3512
3513
3514
3515
可能细心的童鞋已经发现结果已经不一样了,对比图如下。
第1个sql结果 第2个sql结果
3522 3522
3509 3509
3516 3507 这里就已经不一样了
3541 3508
3524 3510
3523 3511
3521 3512
3520 3513
3519 3514
3518 3515
我给出的结论是问题应该出在排序字段上, 当你要排序的字段可能出现重复时,比如以上例子中的 bid_num 字段可能的值 只有1跟0 且 大部分记录还可能是0,因为Mysql的执行优化器是自动的,当排序字段值一样时,优化器可能按他觉得最优的结果来显示,所以导致结果不一样,甚至分页到第二页的话,可能还有重复的结果。
解决办法
在排序字段中加一个能决定顺序的,如id 排序
sql改变后如下
SELECT
api.id
FROM
auction_product_instance api
WHERE
api.`status` = 1
ORDER BY
api.`bid_num` DESC,
api.id DESC
我们来看加分页之后跟没加分页结果如何
没加分页的结果 加分页limit 10之后的结果
3522 3522
3509 3509
3541 3541
3524 3524
3523 3523
3521 3521
3520 3520
3519 3519
3518 3518
3517 3517
3516
3515
3514
我们可以从结果中可以得到,加了id排序之后,优化器就知道了如何去确定最终的排序,从而分页也不会出现重复结果。具体产生的原因是什么如有大神解答,请在评论区评论,以上阐述的原因是本人猜测。