所以我paginate a query LIMIT
和OFFSET
PackageManager
and getPackageInfo(getPackageName(), PackageManager.GET_PERMISSIONS)
SELECT *
FROM db.table
LIMIT 6
OFFSET 0
但是如果我尝试ORDER BY
这个结果,我会得到第一个n
有序行,而不是第一行n
行。
SELECT *
FROM db.table
LIMIT 6
OFFSET 0
ORDER BY first_name COLLATE NOCASE
所以而不是
bob
charles
dave
dan
doug
durrand
我想要
bob
doug
elliot
manny
ralph
xavier
答案 0 :(得分:2)
你想要一个子查询:
SELECT t.*
FROM (SELECT *
FROM db.table
LIMIT 6 OFFSET 0
) t
ORDER BY first_name COLLATE NOCASE;
请注意,这实际上会返回一组不确定的行,然后对其进行排序。
除非您使用order by
,否则不一定能保证返回相同的行集。
答案 1 :(得分:2)
"前n行"在这种情况下没有意义。表格没有固有的顺序;你必须指定它。通常这是通过一些ID列来完成的,该列自动递增以跟踪插入的顺序(这可能就是你的意思)。
您在ORDER BY子句中指定顺序,这就是它以这种方式排序的原因。但是,如果您有ID列,则可以执行以下子选择:
select name from (
select name from foo
order by id
limit...
) order by name