从sqlite数据库中选择第一个术语,包括第一个术语

时间:2014-03-11 21:41:45

标签: android sql database sqlite android-contentresolver

我试图选择第一行和之后的每第五行(这给了我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]区间。 结果不会达到预期值,并且是(约)的两倍。


我的查询方法应如何从第一行开始选择每隔五行?

2 个答案:

答案 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的范围为0X-1 rowid = level+1

请注意,第一次比较({{1}})不是必需的。