【MySQL】MySQL 排序 order by 和分页limit 导致结果重复

以下是一个楼主写项目时一个很普通的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排序之后,优化器就知道了如何去确定最终的排序,从而分页也不会出现重复结果。具体产生的原因是什么如有大神解答,请在评论区评论,以上阐述的原因是本人猜测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰肥啊

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值