根据两列返回数据库结果时,如何分页?
使用限制和偏移很容易,但对于较大的数据集来说速度非常慢。
如果一个列搜索词保持不变,我已经看到了很多方法 - 你只记得另一列的最后一条记录,并显示在下一页的那条记录,如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;将展示“史密斯”。
查询此内容的正确方法是什么?
谢谢你看看
答案 0 :(得分:1)
首先按名字排序,然后按姓氏排序,名称将按如下顺序排序:
Angela Smith <-- last record
Angela Zwick
Aria Aames
Aria Smith
Aria Zucker
对于姓氏相同的人,姓氏必须在“史密斯”之后。 但对于名字较大的人来说,姓氏根本不重要。
所以适当的过滤条件是这样的:
WHERE (firstname = 'Angela' AND lastname > 'Smith')
OR firstname > 'Angela'