Phoenix分页实现
Phoenix的分页实现主要是运用 Phoenix 中的 Row Value Constructors (RVC)
用其作为判定条件,用Limit进行页面大小的控制;
前台界面只需返回当前界面的第一行,和最后一行数据的主键,作为下一页,上一页的判定条件即可;
第一页:
由于phoenix中的记录默认顺序排序,第一页直接从头取固定行数即可;
select * from table limit pageSize;
下一页:
在MySql中,我们可以使用
limit startRow, pageSize
这样的控制条件来实现分页;
但是在phoenix中并没有这样简便的支持,官网上说支持 offset ,但是亲测并无卵用,不知道是什么原因。
因此,使用 RVC+limit 这样的形式自己来进行分页;
在取得第一页记录后,将最后一条数据主键返回后台作为下一页的起始行;
select * from table where (k1,k2, k3) > (v1, v2, v3) limit pageSize;
上一页:
开始我想上一页的查询,直接将 大于号, 换成 小于号 ,
但是返回的结果是从头开始的 pageSize 条;
因此进行倒序查询;
但是作为判定条件的上边界也在返回的结果中;
因此原始页面的第一条数据与其上一页的最后一条数据重复了,我们需要在上一页的查询中多查询一条,并将多余的那行隐藏;
SELECT * FROM table WHERE (k1, k2, k3) < (v1, v2, v3) ORDER BY k1 desc limit pageSize+1;