У меня есть следующий SQL Schema:конкатенация иерархических путей к файлам в sqlite3
CREATE TABLE Folders(
id INTEGER PRIMARY KEY,
path TEXT NOT NULL,
level INTEGER DEFAULT 0,
parentId INTEGER)
элемент с ParentID = NULL является корневым элементом и имеет полный путь в «путях». Вложенные папки сохраняются только по их имени и уровню, который описывает, насколько они ниже корневой папки. Теперь я хочу построить полные пути для всех элементов из этих данных.
КТР не доступен в 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
Однако это, как представляется крайне неэффективным, когда я смотрю на этот план с «объяснить». Я создал индекс на parentId, пути и уровне, но это, похоже, не улучшилось.
Я пытался проверить http://www.sitepoint.com/article/hierarchical-data-database/, но у него есть проблема с перенаправлением.
Да, вы правы, это край, я не видел. Сохраняя полный путь, тогда. Тем не менее, все еще поддерживаю parentId. – philk