php - 如何在 MySQL 中查找所有子行?

标签 php mysql

我有一个层次结构系统设置,将项目的级别和父 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//

SQLFiddle

使用

CALL delete_relations(1)

删除 id = 1 honda 的所有条目及其关系

希望对你有帮助

关于php - 如何在 MySQL 中查找所有子行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16042897/

相关文章:

php - 从 PHP 脚本返回 JSON

php - 验证 HTML 联系表单

javascript - PHP 脚本不断以字符串形式返回数值

mysql - SQL INNER JOIN 修复

mysql - 按字符串和数字对Mysql进行排序

php - wordpress 中的网站在迁移后重定向到旧 URL

php - 根据旧记录的值从查询中获取新记录

java - GenerationType.AUTO 未选择适当的策略

php - 如何在一页php html中显示数据库中的图像?

php - 使用 PHP 和 MySQL 获取多个选中的复选框