Kha*_*han 2 java sqlite android
如果我的数据结构是这样的
parentA
-------parentAA
--------------parentAAA
---------------------childA
Run Code Online (Sandbox Code Playgroud)
如果我能得到"childA.name".我怎么能知道所有的父母名字直到最高级别.所以它会是这样的>parentA/parentAA/parentAAA/childA
做这个的最好方式是什么 ?
我正在使用SQLite和JAVA/android ..感谢adv.
__ _ __ _ __ _ ___编辑
好的伙计们,谢谢你们所有人.所以我只是通过重复"选择查询"来实现.BOTTOM-UP这是我创建的方法
public String getPath(int id, int type) {
StringBuilder pathBuilder = new StringBuilder();
String sql = null;
int parentId = 0;
if (id == 0) {
pathBuilder.insert(0, "/root/");
return pathBuilder.toString();
}
if (type == LayerManagementActivity.PARENT) {
do {
sql = "SELECT id, name, parent_id from parents_table where id="
+ id;
Cursor c = mDatabase.rawQuery(sql, null);
if (c.moveToFirst()) {
parentId = c.getInt(2);
id = c.getInt(0);
pathBuilder.insert(0, "/" + c.getString(1));
c.close();
}
id = parentId;
} while (parentId != 0);
pathBuilder.insert(0, "/root");
pathBuilder.append("/");
} else if (type == LayerManagementActivity.CHILD) {
sql = "SELECT id, name, folder_id FROM childs_table WHERE id=" + id;
Cursor c = mDatabase.rawQuery(sql, null);
if (c.moveToFirst()) {
pathBuilder.append(c.getString(1));
id = c.getInt(0);
int folderId = c.getInt(2);
String path = getPath(folderId, LayerManagementActivity.PARENT);
pathBuilder.insert(0, path);
}
c.close();
}
Log.d("crumb", pathBuilder.toString());
return pathBuilder.toString();
}
Run Code Online (Sandbox Code Playgroud)
在此SQLite版本3.8.3中,2014-02-03增加了对CTE的支持.这是文档WITH子句 示例:
WITH RECURSIVE
cnt(x) AS (
SELECT 1
UNION ALL
SELECT x+1 FROM cnt
LIMIT 1000000
)
SELECT x FROM cnt;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5500 次 |
最近记录: |