我正在研究基于树的架构。有一个表叫做user。 我提供了表的架构,如下所示:
CREATE TABLE `user5` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`parent_id` int(11) NOT NULL,
`position` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `user5`
--
INSERT INTO `user5` (`id`, `name`, `parent_id`, `position`) VALUES
(1, 'test1', 0, 'NULL'),
(2, 'test2', 1, 'left'),
(3, 'test3', 1, 'right'),
(4, 'test4', 2, 'left'),
(5, 'test5', 2, 'right'),
(6, 'test6', 3, 'left'),
(7, 'test7', 3, 'right'),
(8, 'test8', 6, 'left'),
(9, 'test9', 6, 'right'),
(10, 'test10', 7, 'left');
我正在将一个id作为输入传递给下面的查询,该查询返回所有子级节点。
SELECT
GROUP_CONCAT(lv SEPARATOR ',') as team_members
FROM
(
SELECT
@pv:=(
SELECT
GROUP_CONCAT(id SEPARATOR ',')
FROM
user5
WHERE
FIND_IN_SET(parent_id, @pv)
) AS lv
FROM
user5
JOIN
(SELECT @pv:=3)tmp
WHERE
parent_id IN (@pv)
) a
如果我将3作为输入传递给上述查询,则将返回以下结果。
6,7,8,9,10
我将3作为上述结果的第一个元素。
after appending : 3,6,7,8,9,10
所以现在我想要那些少于2个孩子(即1或0)的id。所以我得出的结果应该如下:
id Childcount
7 1
8 0
9 0
10 0
所以现在我只需要返回少于2个孩子的ID。这意味着它应该返回那些只有0个或1个孩子的id,count(孩子的数量)。 那么我们该怎么做。请帮助我。预先感谢
答案 0 :(得分:0)
我得到的答案如下:
SELECT
a.id,
a.parent_id as ParentID,
b.TotalCout
FROM
user5 a
INNER JOIN
(
SELECT
parent_id,
COUNT(1) as TotalCout
FROM
user5
WHERE
parent_id <> id
GROUP BY
parent_id
) b
ON
a.id = b.parent_id
AND
b.TotalCout < 2
AND
a.id IN(3,6,7,8,9,10)
UNION ALL
SELECT
yt1.id,
yt1.parent_id as ParentID,
0 as TotalCout
FROM
user5 yt1
LEFT JOIN
user5 yt2
ON
yt1.id = yt2.parent_id
WHERE
yt2.id is null
AND
yt1.id IN(3,6,7,8,9,10)