Посчитать кол-во записей в группе по потомкам 4-го уровня.

horal

Новичок
Посчитать кол-во записей в группе по потомкам 4-го уровня.

Добрый день!

Есть проблема

таблица 1 : gsm таблица 2: helper

и есть связка:

id, h_id -> helper.h_id

gsm - это заявки на продажу.
helper - справочник - где храниться дерево ( то есть лес, но это не важно).

id, - id узел
h_parent, - родитель узла ( =0 если корень)

title


Есть структура: (id, h_parent)

Масла 51,0
трансмисионные 650, 51
Alpine 1555, 650
марки Alpine (например Alpine\SAE 80W90 GL-4 ) 1564, 1555

Нужно определить, сколько заявок в группе "Масла" подано в таблицу gsm.

пример таблицы:
1,1564
2,1564
3,1565

то есть как определить, что в "Масла" подано 2 заявки?

вариант:

получить список групп
для каждой группы
список подргупп

потом посчитать заявки для h_id и делать суммирование...

может кто, что подсказать?

данный вариант кажестя каким-то неказистым.... и лобовым..

может есть более простое решение?
 

Trianon

Новичок
a).
1. поднять (запросом SELECT id, h_parent FROM helper Where tree_id =$tree_id ) из таблицы всё дерево в php.
2. обойти дерево, сформировать список входящих узлов.
3. выполнить запрос а ля SELECT count(*) FROM gsm WHERE h_id IN($list)

б) сформировать цепочку левых самосоединений (LEFT JOIN) таблицы helper достаточной глубины. доцепить к ним gsm . посчитать count(). Довольно противное решение, на мой взгляд, и ограничения есть на глубину достаточно жесткие. несколько десятков или около того.
Хотя, если 4-й уровень фиксирован - вполне себе вариант. Тогда даже LEFT не нужно. Достаточно INNER.

в) переделать helper из adjacency list в nested sets или matherialized paths
В них запросы такого типа решаются куда проше.
 
Сверху