我有一个这样的 MPTT(修改的预序树遍历):
(取自SitePoint)
我的真实树有数千个节点和更复杂的结构,但这是显示问题的简化。
直到现在,每次我需要更改这棵树时,我都会使用如下所示的 shell 脚本:
#!/bin/bash
mysql -umyuser -pmypass database < tree.sql
并执行此(tree.sql):
DROP TABLE IF EXISTS `tree`;
CREATE TABLE `tree` (
`parent` varchar(32) DEFAULT NULL,
`title` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`lft` int(11) NOT NULL,
`rgt` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
LOCK TABLES `tree` WRITE;
INSERT INTO `tree` VALUES (....),(....)....
(注意:我使用 shell 脚本来执行此操作,因为在多个服务器中存在多个相同 PHP 应用程序的安装,这是更新所有这些应用程序的简单/快速方法,但如果需要,我可以将更新移动到 PHP)。
但是现在,要求指出:
- 食品/肉类分支将永远存在
- 必须保留食物/肉类子树,因为用户现在可以编辑其内容
- 树的其他部分必须更新(在这种情况下为食物/水果,但应用程序与结构无关)。
因此,鉴于此我无法执行 a DROP TABLE
,我需要检索一个分支(食物/肉类)并将其插入到 , 之后的树中DROP TABLE
并被CREATE TABLE
执行INSERT TABLE
。
问题是:如何从 shell 中检索分支?以及如何再次插入?(请注意,如果无法从 shell 脚本执行此操作,我可以创建两个小的 PHP 脚本,但我仍然不知道如何获取分支并再次插入它,欢迎任何想法)