2016-02-24 2 views
2

Так что у меня в этой таблице:Как получить идентификатор с наибольшим количеством детей

+----+-----------+----------+ 
| id | id_parent | id_child | 
+----+-----------+----------+ 
| 1 |  10 |  9 | 
| 2 |  11 |  9 | 
| 3 |  12 |  11 | 
| 4 |  13 |  11 | 
| 5 |  14 |  13 | 
+----+-----------+----------+ 

И я хотел бы, чтобы выбрать родителей с большинством детей. Очевидно, что если 9 ребенок 11 и 11 ребенок из 13, то 9 является дочерним 13. здесь, если я использую:

SELECT id_parent,COUNT(id_child) AS count 
from dependency 
GROUP BY id_parent ORDER BY count DESC; 

Это дало бы 1 для каждого родителя. Есть ли способ сделать это, не добавляя больше записей в базу данных. (Это означает, что без добавления 9 детей из 13 ... и т. Д.) (Модификация схемы таблицы также может быть решением).

+0

Является ли высота дерева фиксированной или может иметь родительское произвольное количество детей? –

+0

Это совершенно случайно. И цифры могут действительно расти, чтобы стать огромными, поэтому я хочу, чтобы он был самым оптимизированным –

ответ

0

Для чего вы пытаетесь достичь, вам нужно будет использовать рекурсию.

Посмотрите на пример здесь: How to do the Recursive SELECT query in MySQL?

Короче говоря, вы определить лучших родителей, те, которые не имеют родителей. Затем вы рекурсивно находите всех детей и детей своих детей и т. Д. Вы можете отслеживать счет в временной таблице. Затем вы можете запросить временную таблицу, чтобы найти родителя с большинством детей.

Вы считаете, что только прямые дети родителя? или вам нужны все дети (включая вложенные)?

Смежные вопросы