我有一个分类的数据库表。它的两个列是'category_id‘和'parent_category’,我正在使用它们来删除。这些列的值对齐如下:

例如,如果我删除'category_id‘10,那么它的所有子(任何深度) 11,12,13也应该被删除。请建议我最好的mysql查询。
提前谢谢。
发布于 2014-07-04 14:26:27
最简单的方法似乎是这样:
parent_category和category_id列之间创建外键约束;这将解决你的问题完全不费力气。
发布于 2014-07-04 14:47:00
如果不想使用外键,则可以添加列parent_path
ALTER TABLE `table`
ADD `parent_path` varchar(255) NOT NULL DEFAULT ''
AFTER `parent_category`, COMMENT='';现在创建一个创建parent_path的过程
DELIMITER $$
DROP PROCEDURE IF EXISTS UpdateParentPath$$
CREATE PROCEDURE UpdateParentPath()
BEGIN
DECLARE count INT;
SET count = 1;
WHILE count > 0 DO
UPDATE `table` as `t`
LEFT JOIN `table` as `p` ON `t`.`parent_category` = `p`.`category_id`
SET `t`.`parent_path` = CONCAT(`p`.`parent_path`, IF(`p`.`parent_path` = '', '', ','), `p`.`category_id`);
SELECT ROW_COUNT() INTO count;
END WHILE;
END$$
DELIMITER ;调用这个过程
CALL UpdateParentPath();而现在..。终于..。你开始删除
DELETE FROM `table` WHERE `parent_category` = '9' OR `parent_path` LIKE '%,9,%'在每次删除之前或之后插入/更新都必须调用UpdateParentPath过程。
https://stackoverflow.com/questions/24576134
复制相似问题