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

→ Ссылка