我有一张新闻报道。我们将此表eval
称为。一群用户不断向news
插入新行。当前正在浏览新闻Feed的用户(来自news
表的数据)。我如何使分页保持一致,请记住,当用户浏览(例如第一页)时,其他用户正在其中插入更多数据。所以,如果第一页有18个新闻,那么我需要使用news
,但在这种情况下我将检索错误的数据,因为已经插入了新的新闻。
如何正确实施分页?
答案 0 :(得分:1)
在应用程序客户端中填写页面的最新和最旧的行时间戳。如果它是一个网络应用,则next
和previous
链接将类似于:
<a href="/news?newest=2016-08-06+20%3A17%3A05.882252%2B00">Previous</a>
<a href="/news?oldest=2016-08-05+20%3A17%3A05.882252%2B00">Next</a>
然后将您从客户端收到的值的值传递给查询,将另一个值传递给null
:
(
select *
from (
select *
from news
where ts > :newest
order by ts
limit 20
) s
order by ts desc
)
union all
(
select *
from news
where ts < :oldest
order by ts desc
limit 20
)
两次插入不太可能在同一毫秒内发生。