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

标签 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]区间内。 结果加起来不等于预期值,并且要少两倍(大约)。


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

最佳答案

您可以使用如下查询来实现此目的(虽然我不确定它的性能):

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,它将返回行的子集。这种方法的缺点是您必须从数据库中获取每一行,如果您有大量数据,这可能会很慢。

关于android - 从 sqlite 数据库中选择每第 n 个术语,包括第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22337285/

相关文章:

sql - 优化多个连接

sql - 学校假期设置中的重叠间隙和岛屿

java - for 循环中的构造函数

android - react native : Hover image onPress

android - CollapsingToolbarLayout with Image,固定纵横比

sql - 选择 activerecord 中分组行的总和

html - 在 JSP 中搜索数据库

java - 执行一个方法非常时间 fragment 出现

android - 我怎样才能知道 onDraw 何时完成?

java - 从 sqliite 数据库获取的数据将单行的多个实例返回到 JTable