在php中创建嵌套组时中断循环
我在我的项目中有一些功能,我们在其中创建组和子组。但是,在这里,孩子们从父母那里得到了高度优先权在php中创建嵌套组时中断循环,php,mysql,sql,phpmyadmin,Php,Mysql,Sql,Phpmyadmin,我在我的项目中有一些功能,我们在其中创建组和子组。但是,在这里,孩子们从父母那里得到了高度优先权 eg. A (parent) -> B(child) -> C(sub child) B is associated with A C is associated with B 在下一步中,我可能会与A关联。但是,它将创建我需要打破的循环。这里,C具有最高优先级,可以访问B(数据)和A(数据),B具有第二优先级,可以访问A(数据) 我的数据库结构: Group table ----
eg. A (parent) -> B(child) -> C(sub child)
B is associated with A
C is associated with B
在下一步中,我可能会与A关联。但是,它将创建我需要打破的循环。这里,C具有最高优先级,可以访问B(数据)和A(数据),B具有第二优先级,可以访问A(数据)
我的数据库结构:
Group table
------------------------------------------
id name parentId
------------------------------------------
1 A null
2 B 1
3 C 2
-------------------------------------------
Group_Data Table
--------------------------------------
gd_id grp_id Data
--------------------------------------
11 1 Peter
22 2 Dennis
33 3 Jene
----------------------------------------
所以,当我进入A组并试图将A组与C组的家长联系起来时,A组不应该允许我这样做。
我想为此编写sql查询。
请帮我解决这个问题
谢谢 您可以创建以下mysql函数来获取所有祖先
DELIMITER $$
DROP FUNCTION IF EXISTS `GetGroupAncestry` $$
CREATE FUNCTION `GetGroupAncestry` (GivenID INT) RETURNS VARCHAR(1024)
DETERMINISTIC
BEGIN
DECLARE rv VARCHAR(1024);
DECLARE cm CHAR(1);
DECLARE ch INT;
SET rv = '';
SET cm = '';
SET ch = GivenID;
WHILE ch > 0 DO
SELECT IFNULL(parentId,-1) INTO ch FROM
(SELECT parentId FROM Group WHERE id = ch) A;
IF ch > 0 THEN
SET rv = CONCAT(rv,cm,ch);
SET cm = ',';
END IF;
END WHILE;
RETURN rv;
END $$
DELIMITER ;
使用此选项,您可以在服务器端语言中设置条件,也可以在查询中将其用作派生表来设置条件