У меня есть этот рекурсивный SQL запрос, где я получить иерархию идентификаторов каждого офиса (офис принадлежит к более высокому рангу должности и тому подобное) - вдохновленный @ leftclickben отвечают в How to do the Recursive SELECT query in MySQL?:Рекурсивный Dynamic Query
select @pv := o.office_id, o.display_name, (
select concat(concat(group_concat(@pv := t.parent_office_id order by t.parent_office_id asc SEPARATOR '.'), '.'), t.office_id) pivot
from (select * from office order by (CASE WHEN parent_office_id < office_id THEN parent_office_id END) DESC,
(CASE WHEN parent_office_id > office_id THEN parent_office_id END) ASC) t
where t.office_id = @pv
) 'hierarchy'
from office o
group by o.office_id
order by o.office_id asc, o.parent_office_id desc
;
Для этот запрос для работы, он нуждается в перфективном потомстве или влиянии, которое должно быть проверено. Это свойство не проверено в моих данных, и поэтому мне пришлось воспользоваться выборочным заказом от в подзапросе.
Я получил очень обнадеживающие результаты (точность 80%), и мне было интересно, может ли кто-нибудь предложить больше методов для получения лучших результатов?
Примеры:
- for some office (ID = 97), its hierarchy is 1.2.4.14.97 (accurate value);
- for another case (ID = 101), I get: 111.101 (broken hierarchy);
В двух словах, все результаты должны начинаться с 1.
Хороший образец:
http://sqlfiddle.com/#!9/82f13/1
Если вы отфильтровываете, где начинается список иерархии с 1, у вас есть правильные результаты? –
В этом случае это обратная иерархия. Поэтому, когда я начинаю с 1, я должен получить 1 (фактический результат равен NULL). Если я начну с 2, я должен получить 1,2 и т. Д. ... –
Что я имею в виду, имеет ли ваш набор результатов все правильные иерархии в дополнение к сломанным? Если это так, вы можете отфильтровать сломанные и сделать это. –