sql分页的limit问题

博主由于粗心而引发的sql语句使用limit语句分页的写法出现bug,在此也和大家一块分享一下

SELECT * FROM t_complaint cc LEFT JOIN t_responsibility rr ON rr.`complaint_id` = cc.`pk_id` 
WHERE cc.is_delete=0 AND rr.`create_time` >= "2019-08-31 00:00:00" AND rr.`create_time` <= "2019-09-02 00:00:00" AND rr.`grade` =1 
ORDER BY cc.`complaintDate` DESC LIMIT 1,10

这是博主的sql语句由于东西太多就直接select * 代替了,此处忽略哈

运行结果

simon
这样是查不出数据的,经过博主的反复测试发现问题就发生在我的limit上了!

SELECT * FROM t_complaint cc LEFT JOIN t_responsibility rr ON rr.`complaint_id` = cc.`pk_id` 
WHERE cc.is_delete=0 AND rr.`create_time` >= "2019-08-31 00:00:00" AND rr.`create_time` <= "2019-09-02 00:00:00" AND rr.`grade` =1 
ORDER BY cc.`complaintDate` DESC 

拿掉limit的运行结果

simon
可以看出来把limit拿掉你就能得到你自己想要的结果了,但是呢你想用sql分页又不能拿掉这个limit,那么此时是什么原因了,博主当时也比较纳闷,写了这么多次sql分页第一次在这个上面出现问题,后面经过一番检验,发现你改成limit 0,10你就能得到你要的结果了,那么是为什么呢!博主突然记起,*分页的算总数的公式是:(页数-1)当前页显示的数量;顿时就反应过来是自己忘记处理了!博主是这样判断处理的:
if (pageSize>=10){ pageSize = 10; }if (pageNum == 1){ pageNum = 0; }else { pageNum=(pageNum-1)*pageSize; }
当然博主是个爱思考的人,由此问题博主也是上网查询了一番资料:limit的使用讲究还是蛮多的
limit一定要配合order使用,不然会出现数据的重复
这个博主就不贴例子了,感兴趣可以自己试试!
用limit必须先order by~ 顺序是 ------ 先 order by … 再 limit …
关于limit的讲究还是蛮多的,博主在这提醒各位程序员要注意!

发布了34 篇原创文章 · 获赞 0 · 访问量 3634

猜你喜欢

转载自blog.csdn.net/qq_43469899/article/details/100192347