1 、 создать новую таблицу. tree_folder(id, id_folder, tree_id)
2 、 создать новую таблицу. tree(id, tree_json)
Таблица tree
поддерживает целый узел дерева. Например, следующее дерево с корневым узлом 1
.
{
"folder_id": 1,
"parent_folder_id": 0,
"children": [
{
"folder_id": 10,
"parent_folder_id": 1,
"children": null
},
{
"folder_id": 11,
"parent_folder_id": 2,
"children": null
}
]
}
Таблица содержит эту строку.
[id, tree_json]
[1, "xxxxx"]
Затем сохраните связь между узлом и деревом. Как видите, дерево содержит узел 1
, 10
, 11
. Тогда у нас есть таблица tree_folder
.
[id, folder_id, tree_id]
[1, 1 , 1]
[2, 10 , 1]
[3, 11 , 1]
Когда вам нужно получить дерево папки 10
. просто достаньте из дерева, а затем разложите это в своей программе.
Таким образом, вы просто делаете рекурсию в памяти вместо mysql.
То есть вы должны поддерживать структуру при записи данных, но запрос выполняется легко и быстро. Если запрос частый, это работает нормально. Но если запись частая, просто используйте кеш вместо этого метода.