私は次のSQLスキーマを持っています:
CREATE TABLE Folders(
id INTEGER PRIMARY KEY,
path TEXT NOT NULL,
level INTEGER DEFAULT 0,
parentId INTEGER)
parentId!= NULLのアイテムはルートアイテムであり、「path」にフルパスがあります。サブフォルダは、名前と、ルートフォルダのどれだけ下にあるかを示すレベルによってのみ保存されます。ここで、このデータからすべてのアイテムのフルパスを作成します。
CTEはSQLiteで使用できないため、アイテムのフルパスをフェッチするために次のクエリを作成しました。
select f.id, ifnull(group_concat(p.path, '\')||'\', '')||f.path as path
from folders f
left outer join (select * from folders order by parentId, level) p on (p.parentId=f.parentId or p.id=f.parentId) and p.level < f.level
group by f.id
ただし、「explain」を使用して実行プランを見ると、これは非常に非効率的であるように思われます。parentId、path、levelでインデックスを作成しましたが、これはあまり改善されていないようです。
http://www.sitepoint.com/article/hierarchical-data-database/を確認しようとしましたが、リダイレクトの問題があります。