Java. Как обойти дерево каталогов и сохранить в MySQL
Задача вроде простая, но споткнулся и ничего не приходит в голову. На диске есть дерево каталогов. Например
\Дом и стиль жизни
\Дом и стиль жизни\Бытовая техника
\Дом и стиль жизни\Бытовая техника\Вентиляторы и обогреватели
\Дом и стиль жизни\Бытовая техника\Крупная бытовая техника
\Дом и стиль жизни\Бытовая техника\Мелкая кухонная техника
\Дом и стиль жизни\Бытовая техника\Мелкая кухонная техника\Миксеры
\Дом и стиль жизни\Ванная
\Дом и стиль жизни\Ванная\Банные полотенца
\Дом и стиль жизни\Ванная\Банные полотенца\Полотенца с капюшоном
И есть таблица MySQL
CREATE TABLE `tblrazdel` (
`id` int(11) NOT NULL,
`parent_id` int(11) NOT NULL,
`is_last` tinyint(1) NOT NULL,
`name` varchar(255) NOT NULL,
`path` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
где is_last - указывает, последний ли каталог в своей ветке (1 или 0)
Проблема в том, что не могу корректно установить parent_id так, чтобы он ссылался на верный id родителя.
Прошу Вашей помощи. Спасибо!
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
Данные позволяют залить список каталогов, а потом запросом расставить связи.
UPDATE tblrazdel t1
JOIN ( SELECT t3.path, MAX(t2.path) parent_path
FROM tblrazdel t3
LEFT JOIN tblrazdel t2 ON LOCATE(t2.path, t3.path) = 1
AND t3.path > t2.path
GROUP BY t3.path ) t4 USING ( path )
LEFT JOIN tblrazdel t5 ON t4.parent_path = t5.path
SET t1.parent_id = COALESCE(t5.id, 0);
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=9a145bf453cb81c6a65d10a3c2025eb1