我试图选择第一行和之后的每第五行(这给了我4个具有唯一行的查询)但我不确定它是否正确,因为我的结果不符合预期。
//create the nth row selection
int n = level + 5;
//query the content resolver
Cursor cursor = contentResolver.query(
MainContentProvider.CONTENT_URI_ENGLISH,
DatabaseOpenHelper.PROJECTION_ENGLISH,
DatabaseOpenHelper.KEY_ROW_ID + " = " + (level+1) + " OR " + DatabaseOpenHelper.KEY_ROW_ID +" % " + n +" = 0",
null,
DatabaseOpenHelper.KEY_ROW_ID + " ASC"
);
其中level
位于[0,3]
区间。
结果不会达到预期值,并且是(约)的两倍。
我的查询方法应如何从第一行开始选择每隔五行?
答案 0 :(得分:1)
您可以使用类似的查询来实现此目的(我不确定它的性能):
SELECT
id,
name,
(SELECT count(*) - 1 FROM my_table t_inner WHERE t.id >= t_inner.id) AS ordinal
FROM my_table t
WHERE ordinal % 5 == 0
ORDER BY id ASC;
或者您可以创建将返回行子集的CursorWrapper
。这种方法的缺点是你必须从数据库中获取每一行,如果你有大量数据,这可能会很慢。
答案 1 :(得分:0)
(假设行ID是连续的,)rowid % X = 0
选择每X
行,因此您不能更改X
。
如果您无法更改该字词,则必须更改另一个字词。
将偏移量应用于rowid
值((rowid - offset) % X = 0
),或与另一个值(rowid % X = offset
)进行比较,其中offset
的范围为0
到X-1
rowid = level+1
。
请注意,第一次比较({{1}})不是必需的。