android - SQLite Android 中带有序值的递归查询

标签 android sqlite recursion cursor

我有一个具有递归关系的group表,因此每条记录都有一个parent_id。给定一个组,我需要获取其所有子组中的所有学生(每个学生都属于一个组)姓名,但按学生姓名排序。

您知道是否有任何“简单”的方法可以做到这一点?如果我必须执行多个查询,那么我应该对不同 Cursors 的结果进行排序,但 Cursor 没有 orderBy()。

有什么想法吗?非常感谢!

最佳答案

由于 SQLite 不支持递归查询,我通过两个步骤实现了选择:

首先,我有一个名为 getRecursiveDiningGroupIdsAsString() 的方法,它递归地检索所有组 id,其父 id 是您通过参数传递的组 id。结果是一个字符串,格式为:“(2, 3, 4)”,因此您稍后可以在 IN 子句中使用它。该方法如下所示:

public String getRecursiveDiningGroupIdsAsString(int depth, long diningGroupId) {
    Cursor childDiningGroups = mDatabase.query(
            "group",
            new String[] {"_id"},
            "parent_id = "+diningGroupId,
            null, null, null, null
    );
    String recursiveDiningGroupIds = "";
    while (childDiningGroups.moveToNext()) {
        long childDiningGroupId = childDiningGroups.getLong(childDiningGroups.getColumnIndex("_id"));
        recursiveDiningGroupIds += getRecursiveDiningGroupIdsAsString(depth+1, childDiningGroupId);
    }
    recursiveDiningGroupIds += diningGroupId;
    if (depth > 0) {
        recursiveDiningGroupIds += ", ";
    } else {
        recursiveDiningGroupIds = "("+recursiveDiningGroupIds+")";
    }
    return recursiveDiningGroupIds;
}

一旦获得了所需的组 ID,我只需使用上一个方法返回的 ID 进行简单的查询即可!

希望对你有帮助!

关于android - SQLite Android 中带有序值的递归查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9509062/

相关文章:

android - 创建 fragment 时的NPE

Android - 来自自定义 ArrayAdapter 类的 notifyDataSetChange

android - 罗盘方向因手机方向而异

java - 在 sql java for android 中向表中添加一列

javascript - 递归 setTimeout 调用是否会导致闭包链内存泄漏?

android - 里面有 & 的 xml 字符串

mysql - 如何获取此查询中的计数?

sqlite - SQLiteObject ionic 3 的插入提供程序

regex - 如何让 Spark session 递归读取所有文件?

javascript - require.js 模块内的递归函数