我有一个表如下(在MySQL 5中创建):
文章:
Id | View-Count | Title
假设Id是自增的,View-Count是一个long表示浏览次数
如果我选择按 Id 排序的所有文章,那么很容易进行如下分页:
Select * from Article Where id < lastViewedArticleId Order By Id DESC Limit pageSize
但是,如果我按观看次数排序,我就不能像上面的查询那样做,因为肯定有一些文章具有相同的观看次数,那么我会错过其中一些。目前,我必须这样做:(如果有数百万条记录,这是一个糟糕的解决方案)
Select * from Article Order By View-Count DESC Limit start, pageSize
有人有针对这种情况的解决方案吗?
为文章创建序列表并定期更新序列(cron)。然后对该页进行分页并用它来分解内容。
SELECT @sequence := 0;
CREATE TABLE Article_sequence Select @sequence := sequence +1 as sequence, article_id from Article Order By View-Count DESC
然后从中进行分页。
每小时执行一次 Cron 作业。这样你就不会错过任何一个节拍。