我有一个带有递归关系的group
表,因此每条记录都有一个parent_id
。给定一个组,我需要在其所有子组中获得所有student
(每个属于一个组)名称,但是按学生名称排序。
您知道是否有“简单”的方法吗?如果我必须做多个查询,那么我应该命令不同游标的结果,但是Cursor没有orderBy()。
有什么想法吗?非常感谢你!
答案 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进行简单的查询,就是这样!
希望它有所帮助!