SQLiteのは、私は2つのステップで選択を実装再帰クエリをサポートしていませんので:
まず、私はこの方法を再帰的に親IDは、パラメータで渡す1であるすべてのグループIDをretreives 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;
}
私は私が必要とするグループIDを持っていたら、私は、以前のメソッドによって返されたIDを使用して簡単なクエリを実行し、それはそれであります!
希望すると助かります!
再帰的なクエリの意味を誤解しているかもしれませんが、再帰的な「選択」をサポートしていないSQLiteについては間違っていると思います。私は 'SQLiteDatabase.rawQuery()'を通して 'SELECT * FROM(SELECT column FROM table)'と似たものを試してみました。これが攻撃的であるか厳しいのであれば申し訳ありませんが、自分自身をノウ・イット・オールのように聞こえるようにする方法は考えられません。 – cesar
私は実際にあなたがそれによって何を意味しているかを調べようとしています。 Androidに再帰的なクエリを許可するメソッドがなく、未処理のSQLコードを使用する必要があることを意味しましたか?それとも別のことを意味しましたか?もう一度、私が知っている人として去っていくのは本当にすみませますが、これを言い換える方法は考えられません。 :P – cesar
Sqliteは再帰クエリをサポートしていません。 cesarを表示するサンプルクエリは再帰的ではなく、単に完全にサポートされている別のクエリに埋め込まれたクエリにすぎません。再帰的なクエリはそれ自身を呼び出すでしょう。 Googleの "Sql CTE"の例 –