0

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

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

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

但是,如果您使用两个不同的列进行搜索呢?

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

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

显示 100 行,最后一行可能是 Angela Smith,所以你在两个 vars 中记住这一点,然后显示下一页...

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 之后,只会显示姓氏 >“Smith”的 Aria。

查询这个的正确方法是什么?

谢谢参观

4

1 回答 1

1

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

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

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

所以正确的过滤条件应该是这样的:

WHERE (firstname = 'Angela' AND lastname > 'Smith')
   OR firstname > 'Angela'
于 2013-10-26T08:13:34.950 回答