如何使用两个字段作为起点来获取数据库记录的下一页?

时间:2013-10-26 07:20:19

标签: sqlite pagination

根据两列返回数据库结果时,如何分页?

使用限制和偏移很容易,但对于较大的数据集来说速度非常慢。

如果一个列搜索词保持不变,我已经看到了很多方法 - 你只记得另一列的最后一条记录,并显示在下一页的那条记录,如http://www.sqlite.org/cvstrac/wiki?p=ScrollingCursor。< / p>

但是,如果您使用两个不同的列进行搜索会怎么样?

例如浏览名字和姓氏,按名字排序,然后是最后一次:

SELECT * FROM table1 ORDER BY firstname COLLATE NOCASE ASC, lastname COLLATE NOCASE ASC LIMIT 100

显示100行,最后一行可能是Angela Smith,所以你记得两个变量,然后显示下一页......

SELECT * FROM table1 WHERE firstname>="Angela" COLLATE NOCASE AND lastname>"Smith" COLLATE NOCASE ORDER BY firstname COLLATE NOCASE ASC, lastname COLLATE NOCASE ASC LIMIT 100 

当他们的名字是Angela时,它可以正常显示其余的名字,但是,然后,在Angela来到Aria之后,只有Aria的姓氏&gt;将展示“史密斯”。

查询此内容的正确方法是什么?

谢谢你看看

1 个答案:

答案 0 :(得分:1)

首先按名字排序,然后按姓氏排序,名称将按如下顺序排序:

Angela  Smith   <-- last record
Angela  Zwick
Aria    Aames
Aria    Smith
Aria    Zucker

对于姓氏相同的人,姓氏必须在“史密斯”之后。 但对于名字较大的人来说,姓氏根本不重要。

所以适当的过滤条件是这样的:

WHERE (firstname = 'Angela' AND lastname > 'Smith')
   OR firstname > 'Angela'