用于填充iPhone快速访问栏的SQL查询(按首字母计数行)

时间:2010-10-26 10:43:51

标签: iphone sql sqlite uitableview

我有一个sqlite数据库,可能有数万行,在iPhone上显示为UITableView。相关表格中有很多列,但现在我只关心“名称”列。 (数据库位于服务器应用程序中,iPhone应用程序是客户端,通过套接字进行通信)自然要使其可用,我想支持“快速访问栏”,因此要计算以A开头的行数,B,C .. Z(理想情况下处理以#或数字等尴尬字符开头的行。)

我在编写SQL查询(由SQLite支持)时难以计算以给定字母开头的行;如果有必要,我可以进行26次单独查询,但我想知道是否有一些嵌套查询魔法一次计算所有值。 (显然'COUNT在哪里名称'A *'会起作用,重复二十六次,但感觉很粗糙,不会处理数字或符号)

相关事实:对数据库的修改很少,我可以轻松缓存查询,并在修改数据库时刷新它。 DB比服务器设备上的RAM大得多,因此避免分页整个DB文件会很好。数据库的相关“名称”列上已有索引。性能比简洁性更重要,因此如果单独的查询比一个复杂的查询更快,那很好。

1 个答案:

答案 0 :(得分:0)

使用substr(X,Y,Z)代替LIKE。

substr(X,Y)substr(X,Y,Z)函数返回输入字符串X的子字符串,该字符串以第Y个字符开头,长度为Z个字符。如果省略Z,则substr(X,Y)返回字符串X的末尾的所有字符,从第Y个开始。 X的最左边的字符是数字1.如果Y是负数,则通过从右边而不是左边开始计算找到子串的第一个字符。如果Z为负,则返回第Y个字符前面的abs(Z)字符。如果X是字符串,则字符索引引用实际的UTF-8字符。如果X是BLOB,则索引引用字节。