删除中间表mySQL

时间:2016-01-24 11:39:46

标签: php mysql recursion

我的数据结构如下:

Parent   |    Child
散       |    ⺙
⺙       |    
⺙       |    乂
散       |    38239
38239    |    龷
38239    |    月

如您所见,有时会出现中间映射(即散布> 38239>龷/月)。

我试图整理一个递归脚本,将以上数据改为:

Parent   |    Child
散       |    ⺙
⺙       |    
⺙       |    乂
散       |    龷
散       |    月

它基本上只是删除了中间映射。你在这里看到的是,有时会有多级中间映射(即数字映射到其他数字),我们不知道会有多少级映射是的,所以它需要递归。

我最近的尝试使用了php循环和mysql查询,但它只占用了太多资源而且耗费了太多时间/使用了太多内存才能使用。

是否有针对此问题的纯MySQL解决方案?

1 个答案:

答案 0 :(得分:0)

您可以分2步完成

首先设置父母,然后删除孩子

CREATE TABLE `parchild` (
  `parent` varchar(32) DEFAULT NULL,
  `child` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `parchild` (`parent`, `child`)
VALUES
    ('散', '⺙'),
    ('⺙', ''),
    ('⺙', '乂'),
    ('散', '38239'),
    ('38239', '龷'),
    ('38239', '月');

UPDATE parchild p
LEFT JOIN parchild p1 ON p.parent = p1.child 
SET p.parent = p1.parent
WHERE  CONVERT(p.parent, INTEGER) > 0;

DELETE FROM parchild 
WHERE  CONVERT(child, INTEGER) > 0;

请告诉我它是否适合您