如何在sqlite IPHONE中获取rowNum like列

use*_*427 4 sql sqlite iphone oracle objective-c

我有一个这样的Sqlite数据库表(没有升序)

在此输入图像描述

但是我需要按名称升序顺序检索表,当我按升序设置它时,rowId按照混乱的顺序改变如下

在此输入图像描述

但我每次都需要按升序检索一些有限数量的联系人5

Aaa - EeeeFfff-Jjjjj ......

但是要限制像0-5 5-10 ....**它可以使用rowid,因为它们是混乱的顺序

所以我需要另一个列,如(oracle中的rowNum),按顺序为1234567 ...每次都如下

在此输入图像描述

如何使用现有列检索该列

Note: WE DONTE HAVE ROWNUM LIKE COLUMN IN SQLITE

yve*_*ves 17

假rownum解决方案很聪明,但我担心它不能很好地扩展(对于复杂的查询,你必须加入并依赖每一行当前行之前的行数).

我会考虑使用create table tmp as select /*your query*/.因为在创建为select操作的情况下,插入行时创建的rowid正好是rownum(计数器).它由SQLite doc指定.

插入初始查询后,您只需查询tmp表:

select rowid, /* your columns */ from tmp
order by rowid
Run Code Online (Sandbox Code Playgroud)


chu*_*e x 6

您可以使用偏移/限制.

获取五行的第一,第二和第三组:

select rowid, name from contactinfo order by name limit 0, 5
select rowid, name from contactinfo order by name limit 5, 5
select rowid, name from contactinfo order by name limit 10, 5
Run Code Online (Sandbox Code Playgroud)

警告,使用上述语法要求SQLite按排序顺序读取所有先前的记录.因此,要获得SQLite之上的第3条语句,需要读取前9条记录.如果您有大量记录,从性能角度来看,这可能会有问题.

有关限制/偏移的更多信息:

Sqlite查询优化(使用限制和偏移)

Sqlite LIMIT/OFFSET查询