Mysql 如果新的插入改变了顺序,如何从数据库中检索一系列有序数据?

Mysql 如果新的插入改变了顺序,如何从数据库中检索一系列有序数据?,mysql,sql,database,web-services,Mysql,Sql,Database,Web Services,我正在实现一个webservice API,它从数据库中检索帖子(帖子id、发布日期、内容、查看次数) posts?start=0&&per_page=5 这将获得按查看次数排序的前5篇文章,然后如果用户向下移动或单击下一页,我们将通过发送 posts?start=5&&per\u page=5 但是如果我们在两个查询之间的表B中插入新的post呢?在这种情况下,我们可能会发现以前返回的帖子再次被返回 例如: post_id | posted date | content

我正在实现一个webservice API,它从数据库中检索帖子(帖子id、发布日期、内容、查看次数)

posts?start=0&&per_page=5
这将获得按查看次数排序的前5篇文章,然后如果用户向下移动或单击下一页,我们将通过发送
posts?start=5&&per\u page=5
但是如果我们在两个查询之间的表B中插入新的post呢?在这种情况下,我们可能会发现以前返回的帖子再次被返回

例如:

post_id | posted date   | content | view_count
1           20160301        test1       100
2           20160302        test2       90
3           20160303        test3       80
4           20160304        test4       70
5           20160305        test4       60

6           20160306100     test6       50
....
然后在第一次查询之后但在第二次查询之前,post_id=6的view_计数增加到65,然后表变成(按view_计数排序后):


在这种情况下,我应该如何过滤以前返回的值并返回接下来的5篇文章?这在MYSQL中可能吗?

您需要使用基于光标的分页,如果您使用increment作为表id,则可以如下所示使用它

select * from posts where id > {id} limit 10
传递请求中最后一个项目id的位置
posts?startIndex={id}&&per_page=10

您需要使用基于光标的分页,如果您使用increment作为表id,则可以如下所示使用它

select * from posts where id > {id} limit 10
传递请求中最后一个项目id的位置
posts?startIndex={id}&&per_page=10

是的,如果我想检索按post_日期排序的帖子(post_id是自动递增的),这是一个很好的解决方案,但是如果我想检索按view_count排序的帖子,解决方案是什么?是的,如果我想检索按post_日期排序的帖子,这是一个很好的解决方案(post_id为自动增量),但如果我想检索按view_count排序的帖子,解决方案是什么?为什么要避免这种行为?@Oleg Komarov,也许我之前的问题不太清楚,请再次检查。原因是我不想显示以前返回的帖子,用户会感到奇怪和恼火。数据库状态将发生变化在多用户系统中。您不能依赖于用户请求后正在更改的内容的顺序。要么使用它,要么在MySQL拥有的类似于SQL server的读提交快照隔离或oracle的标准读提交模式的任何数据库中运行查询。当然,如果这样做,您将无法获得最新数据。@NWest,您认为创建一个只存储post_id和view_计数的表post_视图是一个好主意吗?例如,每10分钟更新一次表?在这种情况下,我们阅读post_视图,它不会一直更改。您为什么要避免这种行为?@Oleg Komarov,也许我之前的问题不太清楚,请再次检查。原因是我不想显示以前返回的帖子,用户会感到奇怪和恼火。在多用户系统中,数据库状态将发生变化。用户请求后,您不能依赖某些内容的变化顺序。要么使用它,要么在MySQL中类似SQL的任何内容中运行您的查询服务器的读提交快照隔离或oracle的标准读提交模式。如果这样做,当然不会获得最新数据。@NWest,您认为创建一个只存储post\u id和view\u计数并使其更稳定的表post\u视图是一个好主意吗?在本cas中,例如每10分钟更新一次该表我们读的是post_视图,它不会一直改变。