在SQLite Android中使用有序值进行递归查询

时间:2012-03-01 00:43:40

标签: android sqlite recursion cursor

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

您知道是否有“简单”的方法吗?如果我必须做多个查询,那么我应该命令不同游标的结果,但是Cursor没有orderBy()。

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

1 个答案:

答案 0 :(得分:2)

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

首先,我有一个名为getRecursiveDiningGroupIdsAsString()的方法,它以递归方式检索所有组ID,其父ID是您通过参数传递的组ID。结果是一个String形式为:“(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进行简单的查询,就是这样!

希望它有所帮助!