Получить все возможные значения из БД

197
23 октября 2021, 00:50

У меня есть система файлов и папок. В данном контексте - папка и файл некое структурированное значение в БД. Я хочу сделать удаление папки. Для этого мне нужно узнать все ID файлов и папок, которые могут находится внутри удаляемой папки.

Моя таблица folders:

id folder_id 1 0

Моя таблица files

id folder_id 1 0

Например папка folder_id 90 может находится в folder_id 100, а та в свою очередь может находится в десятках других.

Как мне получить все связанные таким образом значения из таблицы mySQL методами php ?

Answer 1

Есть несколько способов хранения иерархических структур в БД:

  • Adjacency List («список смежности») Для каждой записи хранится id родителя. Вся ветка вычисляется рекурсивными запросами. Подходит для небольшой вложенности. Требуется много запросов к бд

  • Materialized Path («материализованный путь») В каждой записи хранится длинная строка, содержащая все id родителей с неким разделителем

  • Nested Sets («вложенные множества») В каждой записи хранится пара колонок lft и rgt, хранящие диапазон всех вложенных элементов. Можно быстро получить всю ветку, но много накладных расходов на вставку новой записи или перемещение её между ветками.

  • Closure Table («таблица связей») В отдельной таблице хранятся все связи родитель-потомок. Быстрое получение нужной ветки, но большое кол-во записей связей. Сложности с выводом отсортированного дерева

Существует множество реализаций данных алгоритмов как в php, так и непосредственно в хранимых процедурах mySQL.

Преимущества и недостатки каждого из способов надо рассматривать вместе с требованиями к конкретному проекту

READ ALSO
Как писать один лог одновременно несколькими обработчиками? PHP

Как писать один лог одновременно несколькими обработчиками? PHP

Вернее, обработчик один, но много запросов идут вместе (телеграмм бот)Заметил, что в логе в пиковые моменты далеко не вся информация записана,...

153
Как подключить расширения в php

Как подключить расширения в php

Laravel требует чтобы были установлены следующие php расширения:

192
Рекурсивное добавление в массив

Рекурсивное добавление в массив

Почему не срабатывает такая запись? выдает:

126
InputMismatchException using Scanner#nextDouble with valid values

InputMismatchException using Scanner#nextDouble with valid values

Я новичок в джаве и вот мой код:

153