Поскольку SQLite не поддерживает рекурсивные запросы, я реализовал select с помощью двух шагов:
Во-первых, у меня есть метод с именем getRecursiveDiningGroupIdsAsString()
, который рекурсивно получает все идентификаторы групп, родительский идентификатор которых тот, который вы проходите мимопараметр.В результате получается строка в форме: «(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;
}
Как только у меня есть нужные групповые идентификаторы, я просто делаю простой запрос, используя идентификаторы, возвращенные предыдущим методом, и все!
Надеюсьпомогает!