检索具有指定parentid的所有子项

时间:2014-12-11 02:19:08

标签: php mysql sql database

我有这个桌子设计。我想让他所有的孩子都在指定的parentid,但我在如何过滤和得到他所有的donwline孩子有问题

CREATE TABLE `treetbl` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `parentid` INT(11) NOT NULL DEFAULT '0',
    `lft` INT(11) NOT NULL DEFAULT '0',
    `rgt` INT(11) NOT NULL DEFAULT '0',
    PRIMARY KEY (`id`)
)

treetbl

id      parentid       lft     rgt

1        1             1       1   

2        5             6       7

3        7             8       9

以下是我对检索完整树

的查询
SELECT node.parentid,node.lft,node.rgt
FROM treetbl AS node,
        treetbl AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt

ORDER BY node.lft;

但我很困惑如何过滤parentid示例5以获得他所有的孩子。

提前谢谢。

2 个答案:

答案 0 :(得分:-1)

如果我理解正确,您只想选择parentid = 5的记录。 我是对的吗?

如果是这样,你说这适用于所有参赛作品:

SELECT node.parentid,node.lft,node.rgt FROM treetbl AS node, treetbl AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt ORDER BY node.lft;

,那么为什么不在parentid = 5语句的帮助下添加AND呢?像这样:

SELECT node.parentid,node.lft,node.rgt FROM treetbl AS node, treetbl AS parent 
WHERE parentid = 5 AND node.lft BETWEEN parent.lft AND parent.rgt
ORDER BY node.lft;

当然,您可以将硬编码的5更改为某个$parentID PHP变量。

答案 1 :(得分:-1)

也许这就是你正在寻找的东西

SELECT * FROM (SELECT node.parentid,node.lft,node.rgt
FROM treetbl AS node,
    treetbl AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt

ORDER BY node.lft)A Where A.parentid>=5 ;

如果我错了,请告诉我