Home  >  Article  >  Backend Development  >  MySQL采用游标分页的方式,“下一页”很好实现,那“上一页”如何实现呢?

MySQL采用游标分页的方式,“下一页”很好实现,那“上一页”如何实现呢?

WBOY
WBOYOriginal
2016-06-06 20:28:322014browse

为让mysql达到最佳查询性能,我将分页查询改为cursor查询方式:

select * from reply where reply_id > last_id limit 20 order by reply_id ASC;

上面的last_id为本页最后一条回复的reply_id,这样就能实现“下一页”的查询了,但是“上一页”如何实现呢?
我想过改变排列顺序

select * from reply where reply_id 

这样还要在url中添加一个参数,我想保持url路由为www.example.com/reply/last_id,即不添加另外一个参数如:www.example.com/reply/last_id/direction/prev 这样,我想过用javascript的history.back(),但感觉还是很不靠谱.请问有没有更好的实现方式?

回复内容:

为让mysql达到最佳查询性能,我将分页查询改为cursor查询方式:

select * from reply where reply_id > last_id limit 20 order by reply_id ASC;

上面的last_id为本页最后一条回复的reply_id,这样就能实现“下一页”的查询了,但是“上一页”如何实现呢?
我想过改变排列顺序

select * from reply where reply_id 

这样还要在url中添加一个参数,我想保持url路由为www.example.com/reply/last_id,即不添加另外一个参数如:www.example.com/reply/last_id/direction/prev 这样,我想过用javascript的history.back(),但感觉还是很不靠谱.请问有没有更好的实现方式?

其实你这是个路由问题,不是个MySQL的查询问题。。。

方法很多。。。比如

  1. last_id区分正负数
    www.example.com/reply/12345代表下一页
    www.example.com/reply/-12345代表上一页

  2. 重新定义路由规则
    www.example.com/reply/next/12345 下一页
    www.example.com/reply/previous/12345 上一页

cursor 适合无限加载的方式,分页还是建议用传统的方式。

PS:话说传统的方式最后还是转换为 cursor 啊。。。所以你这个“为了达到最佳查询性能”说法不准确。

如果想简单解决问题的话,就加两个,这样不管是PC端下一页还是Mobile端加载更多,都可以实现。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn