1

我有一个这样的 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)。

但是现在,要求指出:

  1. 食品/肉类分支将永远存在
  2. 必须保留食物/肉类子树,因为用户现在可以编辑其内容
  3. 树的其他部分必须更新(在这种情况下为食物/水果,但应用程序与结构无关)。

因此,鉴于此我无法执行 a DROP TABLE,我需要检索一个分支(食物/肉类)并将其插入到 , 之后的树中DROP TABLE并被CREATE TABLE执行INSERT TABLE

问题是:如何从 shell 中检索分支?以及如何再次插入?(请注意,如果无法从 shell 脚本执行此操作,我可以创建两个小的 PHP 脚本,但我仍然不知道如何获取分支并再次插入它,欢迎任何想法)

4

0 回答 0