2016-07-08 5 views
1

как посчитать в SQL числа детей в имя в родословной, как структура дереваSQL, соиЬ количество детей в каждой кампании родословной

ID | NAME     | PATH 
100 | Electronics & Computers | /100 
101 | Games     | /100/101 
102 | Xbox360     | /100/101/102 
103 | PS4      | /100/101/103 

, так что я должен иметь что-то вроде

100 | 3 
101 | 2 
102 | 0 
103 | 0 

спасибо много для справки

ответ

0

Вот один из методов, который использует самоподключение и агрегацию:

select t.id, count(t2.id) 
from t left join 
    t t2 
    on t2.path like concat(t.path, '/%') 
group by t.id; 
+0

так что t и t2 - 2 таблицы?, Я имею в виду, что мой пример с именем и дорогой находится в одной таблице – urbanczykd

+0

ah ok имейте это спасибо много :) – urbanczykd

+0

отлично работает только одна небольшая проблема, что первый элемент имеет путь nil и он не рассчитывает на него, но, может быть, я смогу разобраться в нем – urbanczykd

0
SELECT A.id, 
     (SELECT count(B.id) FROM `tablename` B where path like CONCAT('%/', A.id, '%') and B.id != A.id) count 
    FROM `tablename` A 

Попробуйте этот. http://sqlfiddle.com/#!9/51b7b/1

+0

тот же выпуск извините забыл упомянуть, что первая запись имеет путь = nil – urbanczykd

+0

Если это ноль, он также будет работать. –

+0

проверьте это http://sqlfiddle.com/#!9/51b7b/1 –

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

  • Нет связанных вопросов^_^