![](/img/trans.png)
[英]How to get Instagram comment parent id and identify if it top-level or reply
[英]MySQL - Getting the top-level parent id in a hierarchy
这是我的表结构......
表: position_hierarchy_level
id parent_position_id position_id
1 1 2
2 2 3
3 3 4
4 4 5
5 5 6
6 6 7
7 7 8
8 8 9
9 9 10
10 10 11
11 11 12
12 12 13
13 13 14
14 14 15
我获取某个position_id
的parent_position_id
的查询是:
select `parent_position_id` from `position_hierarchy_level` where position_id= 15;
但是如何才能获得某个position_id
的最顶级父级? 例如, position_id
15的最顶层parent_position_id
将为1
。
有没有一种方便的方法来使用单个查询获取此值? 或者我需要在PHP中创建一个循环?
看起来像同样的问题: 用于邻接列表显示的递归PHP函数
使用mysql的单个查询可能有点不同。 也许你可以用存储过程解决这个问题。
如果我理解正确,你想要最高position_id为parent_position_id有1等等...
1。 将parent_position_id设置为自动递增
2。 通过position_id desc从表顺序中选择position_id并将它们放在一个数组中
3。 截断表
4。 将数组插入表中
尝试这个:
DELIMITER $$
CREATE FUNCTION getTopParentPositionId(positionId INT) RETURNS INT DETERMINISTIC
BEGIN
DECLARE x INT;
DECLARE y INT;
SET x = positionId;
sloop:LOOP
SET y = NULL;
SELECT parent_position_id INTO y FROM position_hierarchy_level WHERE position_id = x;
IF y IS NULL THEN
LEAVE sloop;
END IF;
SET x = y;
ITERATE sloop;
END LOOP;
RETURN x;
END $$
DELIMITER ;
然后:
SELECT getTopParentPositionId( 5 );
显然, 你并不是唯一一个研究过那种解决方案的人:)
使用这个表结构,你拥有的最佳选择是在php结束时循环。
如果表结构是你可以自由的改变(在情况下,如果项目是不是已经生活 ),你可能要考虑结构称为Closure Tables
。 你可以找到的是如何使用/设置在一个简单的例子, 这篇文章 。
无论如何,您应该能够在SQL Antipatterns一书中找到更多有关该主题的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.