Is there a simple way to query the children of a node?

前端 未结 6 1029
余生分开走
余生分开走 2020-12-10 05:19

I\'ve been using the crap out of the Nested Set Model lately. I have enjoyed designing queries for just about every useful operation and view. One thing I\'m stuck on is how

6条回答
  •  一整个雨季
    2020-12-10 05:52

    THIS ONE IS BETTER AND SMALLER

    User "bobince" almost had it. I figured it out and got it to work for me because I have a little more MySQL experience than most. However, I can see why bobince's answer might scare people off. His query is incomplete. You need to select the parent_left and parent_right into mysql variables first.

    The two queries below assume that your table is named tree, your left column is named lft, right column is named rgt, and that your primary key is named id. Change these values to suit your needs. Also, examine the first select statement. You will see that I am looking up the immediate descendants of node 5. Change the number 5 to look for children of whatever node you want.

    I personally think this is a sleeker, sexier, and more efficient query than the others presented so far.

    SELECT `lft`, `rgt` INTO @parent_left, @parent_right FROM efm_files WHERE `id` = 5;
    SELECT `child`.`id`
    FROM `tree` AS `child`
    LEFT JOIN `tree` AS `ancestor` ON
        `ancestor`.`lft` BETWEEN @parent_left+1 AND @parent_right-1 AND
        `child`.`lft` BETWEEN `ancestor`.`lft`+1 AND `ancestor`.`rgt`-1
    WHERE
        `child`.`lft` BETWEEN @parent_left+1 AND @parent_right-1 AND
        `ancestor`.`id` IS NULL
    

提交回复
热议问题