MySQL таблица самоотображения, возвращающая идентификатор родителя и количество детей - PullRequest
1 голос
/ 03 мая 2011

У меня есть собственная таблица ссылок, и я хочу запрос mysql, который будет возвращать только самого верхнего родителя (parent = 0) и количество дочерних элементов, принадлежащих каждому из них.Это то, что у меня есть, но я знаю, что это не сработает.

SELECT id, (SELECT COUNT(id) FROM example where parent_id = id) FROM example WHERE parent_id = 0;

+--------+-----------+
|   id   | parent_id |
+--------+-----------+
|    1   |     0     |
|    2   |     1     |
|    3   |     1     |
|    4   |     0     |
|    5   |     4     |
+--------+-----------+

Ответы [ 4 ]

2 голосов
/ 03 мая 2011
SELECT parent_id parent, count( * ) num_children
FROM example
GROUP BY parent_id
HAVING parent_id
IN (

SELECT id
FROM `example`
WHERE parent_id =0
)
0 голосов
/ 03 мая 2011

Благодаря ответам, предоставленным Дейвом Моррисом и Томгролем, я смог заставить его работать. Вот MySQL, который я использовал.

SELECT parent_id parent, count( * ) num_children
FROM example
GROUP BY parent_id
HAVING parent_id <> 0
IN (
    SELECT id
    FROM `example`
    WHERE parent_id = 0
);
0 голосов
/ 03 мая 2011

Что-то настолько простое, как это должно работать:

SELECT parent_id, count( * ) cnt
FROM example
WHERE parent_id
IN (
   SELECT id
   FROM `example`
   WHERE parent_id =0
)
GROUP BY parent_id
0 голосов
/ 03 мая 2011

Вам нужно будет префикс столбцов с псевдонимом таблицы

SELECT id, (SELECT COUNT (inner.id) FROM примера inner, где inner.parent_id = external.id) FROM примера external WHERE parent_id = 0;

...