爱收集资源网

如何解决点赞数相同按创建时间倒序排序的方法

网络整理 2024-01-30 15:13

1.背景

在联通端,评论列表要按点赞数升序排序进行分页,假若点赞数相同按创建时间升序排序。(升序:值从大到小)

2.问题

往年列表须要按时间戳升序排序,由于13位时间戳的惟一性强,不容易重复,可以取列表最后一个item的时间戳进行

点评的网站_赞网站点评论怎么说_点赞评论网站

然而点赞数会出现相同的情况,例如有10个相等点赞数为5的数据,正好分页到中间第五个,怎么下一次分页的时侯拉取剩下五个点赞数为5的和大于5的数据点赞评论网站,防止拉到早已拉过的前五个数据呢?

3.解决方法

模仿时间戳分页。取最后一个item的点赞数(agreeCount)和创建时间戳(lastTime)。

数据排序规则为:先按点赞数升序排序,假若点赞数相同按创建时间升序排序。

赞网站点评论怎么说_点评的网站_点赞评论网站

伪sql:orderbyagreeCountdesc,createTimedesc.

第一页:不进行任何条件查询,直接按该次序查出指定的条数例如前20条:limit20。(怎样判定是否为第一页,可跟联通端约定如:第一页agreeCount传-1点赞评论网站,通过agreeCount==-1判定是否为第一页,切忌不可以传0进行标示,由于点赞数会有为0的情况)。

第二页:分两步查询,(取问题2的反例)

最后附上完整的伪代码:

int pageSize = 20;
List list = new ArrayList();
if (agreeCount == -1){
//第一页
   list = (select * from t_ideas order by agreeCount desc,createTime desc limit pageSize);
} else {
//下一页
   //拉取等于当前点赞数数据
   List sameList = (
                      select * from t_ideas 
                     where agreeCount = 5 and createTime < lastTime 
                     order by agreeCount desc, createTime desc limit pageSize);
   list.addAll(sameList);
   if (sameList.size() < pageSize){
       //拉取少于当前点赞数数据
       int surplus = pageSize-sameList.size();
       List surPlusList = (
                     select * from t_ideas 
                     where agreeCount < 5 
                     order by agreeCount desc, createTime desc limit surplus);
       list.addAll(surPlusList);
  }
}
return list;

点赞评论网站