我有这样的数据
使用这个查询,我得到了正确的输出
SELECT id,
nama,
parent_id
FROM (SELECT * FROM members
ORDER BY parent_id, id) members,
(SELECT @pv := '3') initialisation
WHERE FIND_IN_SET(parent_id, @pv) > 0
AND @pv := CONCAT(@pv, ',', id)
输出:
但是,如果我将成员14的parent_id从父项13修改为15,则得到错误的输出
输出:(显示的列不到1列(成员14))
预期输出:
id nama parent_id
8 Member8 3
13 Member13 8
15 Member15 13
14 Member14 15
1条答案
按热度按时间vdzxcuhz1#
这是因为@pv变量是为每一行处理的,它这样做是为了尊重表的自然顺序(id值)。您可以在结果中添加@pv
所以,当在14位成员@pv上时,不要有15个id。因此,约束条件是每一行的parent_id必须小于id。