我有一个具有递归关系的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/