我有一个层次结构系统设置,将项目的级别和父 ID 存储在数据库中。我想弄清楚的是如何找到用户选择的所有子行。这是表结构的示例:
+----+---------+----------+-------+
| Id | label | parentid | level |
+----+---------+----------+-------+
| 1 | honda | 0 | 1 |
| 2 | accord | 1 | 2 |
| 3 | civic | 1 | 2 |
| 4 | element | 1 | 2 |
| 5 | v4 | 2 | 3 |
| 6 | v6 | 2 | 3 |
+----+---------+----------+-------+
那么,如果有人删除了 honda
,我将如何删除层次结构中的所有内容?数据库只会下降到 3 级。
最佳答案
引用, Recursive MySQL Query with relational innoDB
我昨天已经发布了相同的答案
更新:
下面是一个基于上述链接的函数
,但已根据您的DELETE
要求量身定制
CREATE PROCEDURE `delete_relations`(`_id` INT)
BEGIN
DECLARE delete_row_ids varchar(200);
DECLARE id, id2 varchar(200);
DECLARE rows_affected int;
SET delete_row_ids = _id;
SET id = _id;
SET id2 = id;
WHILE id2 IS NOT NULL DO
SET id = NULL;
SELECT GROUP_CONCAT( hierarchical_data.id ), CONCAT( GROUP_CONCAT( hierarchical_data.ID ),',',delete_row_ids) INTO id, delete_row_ids FROM hierarchical_data WHERE FIND_IN_SET( parentid , id2 ) GROUP BY parentid ;
SET id2 = id;
END WHILE;
DELETE FROM hierarchical_data where FIND_IN_SET(hierarchical_data.id, delete_row_ids);
SELECT row_count() INTO rows_affected;
if rows_affected > 0 THEN
SELECT delete_row_ids as row_ids_deleted;
ELSE
SELECT 'NO_ROWS_DELETED';
END IF;
END//
使用
CALL delete_relations(1)
删除 id = 1 honda
的所有条目及其关系
希望对你有帮助
关于php - 如何在 MySQL 中查找所有子行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042897/