MySQL查询获取分层数据

92dk7w1h  于 2022-12-10  发布在  Mysql
关注(0)|答案(1)|浏览(186)

我有这样的数据

使用这个查询,我得到了正确的输出

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
vdzxcuhz

vdzxcuhz1#

这是因为@pv变量是为每一行处理的,它这样做是为了尊重表的自然顺序(id值)。您可以在结果中添加@pv

id  name            pv
8   Member8     3   3,8
13  Member13    8   3,8,13
15  Member15    13  3,8,13,15

所以,当在14位成员@pv上时,不要有15个id。因此,约束条件是每一行的parent_id必须小于id。

相关问题