簡體   English   中英

獲取子計數小於2的記錄

[英]get records whose child count is less than 2

我正在研究基於樹的架構。 有一個表叫做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個孩子的id(即1或0)。因此我得出的結果應該如下:

id  Childcount
7   1
8   0
9   0
10  0

因此,現在我只需要返回少於2個孩子的ID。 這意味着它應該返回那些只有0個或1個孩子的id,count(孩子的數量)。 那么我們該怎么做。 請幫助我。 提前致謝

我得到的答案如下:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM