作为后端开发,分页是我们必备的技能。比如商品列表就需要分页,每页10条左右。但是我在写SQL时不注意可能会导致数据重复,主要原因是排序字段的内容重复导致排序异常。
准备表及数据:
CREATE TABLE `products` ( `id` int(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT, `name` varchar(45) NOT NULL DEFAULT '' COMMENT '产品名称', `product_no` varchar(32) NOT NULL COMMENT '产品编号', `sort_weight` int(11) NOT NULL DEFAULT '0' COMMENT '排序(越大越靠前)', `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态(0正常)' ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='定制产品'; INSERT INTO products(`name`,`product_no`,`sort_weight`,`status`) VALUES ('测试商品1','11111',111,1),('测试商品2','2222',222,1),('测试商品3','3333',3333,1), ('测试商品4','4444',4444,1),('测试商品5','55555',55555,1),('测试商品6','666',6666,1),('测试商品7','77777',7777,1), ('测试商品8','8888',8888,1),('测试商品9','999',9999,1),('测试商品111','11111',111,1),('测试商品12','1221',12121,1), ('测试商品4','4444',4444,1),('测试商品5','55555',55555,1),('测试商品6','666',6666,1),('测试商品7','77777',7777,1), ('测试商品4','4444',4444,1),('测试商品5','55555',55555,1),('测试商品6','666',6666,1),('测试商品7','77777',7777,1), ('测试商品4','4444',4444,1),('测试商品5','55555',55555,1),('测试商品6','7777',7777,1),('测试商品7','77777',7777,1);
复制
测试实际结果:
我们先来查询第一页的数据看看:
看上去好像没有什么问题,我们再来查询第二页的数据:
我们发现有时候第二页里面会返回第一页里面的商品,这个bug的主要原因是排序字段【sort_weight】出现重复的值,即大家的排序是一样的,导致MySQL第二次查询时不知道把这些重复的值如何排序。
解决问题
要解决这个问题,我们可以在排序的字段中添加其他排序字段,比如主键【id】。就如同这个SQL:
SELECT * FROM products WHERE status=1 ORDER BY sort_weight DESC,id desc LIMIT 11,10;
复制
希望这篇文章可以帮到正在阅读的你,如果觉得此文对你有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
欢迎关注我的公众号【编程经验共享】,第一时间一起学习新知识!
————————————————————————————
公众号:编程经验共享
墨天轮:https://www.modb.pro/u/545037
个人博客:https://www.motui8.cn/
————————————————————————————
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1321次阅读
2025-03-13 11:40:53
MySQL8.0统计信息总结
闫建(Rock Yan)
492次阅读
2025-03-17 16:04:03
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
463次阅读
2025-03-13 14:38:19
SQL优化 - explain查看SQL执行计划(一)
金同学
393次阅读
2025-03-13 16:04:22
MySQL突然崩溃?教你用gdb解剖core文件,快速锁定“元凶”!
szrsu
368次阅读
2025-03-13 00:29:43
MySQL生产实战优化(利用Index skip scan优化性能提升257倍)
chengang
328次阅读
2025-03-17 10:36:40
MySQL数据库当前和历史事务分析
听见风的声音
294次阅读
2025-04-01 08:47:17
一键装库脚本3分钟极速部署,传统耗时砍掉95%!
IT邦德
238次阅读
2025-03-10 07:58:44
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
232次阅读
2025-03-28 16:28:31
MySQL8.0直方图功能简介
Rock Yan
232次阅读
2025-03-21 15:30:53