我的数据结构如下:
Parent | Child
散 | ⺙
⺙ |
⺙ | 乂
散 | 38239
38239 | 龷
38239 | 月
如您所见,有时会出现中间映射(即散布> 38239>龷/月)。
我试图整理一个递归脚本,将以上数据改为:
Parent | Child
散 | ⺙
⺙ |
⺙ | 乂
散 | 龷
散 | 月
它基本上只是删除了中间映射。你在这里看到的是,有时会有多级中间映射(即数字映射到其他数字),我们不知道会有多少级映射是的,所以它需要递归。
我最近的尝试使用了php循环和mysql查询,但它只占用了太多资源而且耗费了太多时间/使用了太多内存才能使用。
是否有针对此问题的纯MySQL解决方案?
答案 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;
请告诉我它是否适合您