递归动态查询

时间:2015-09-19 21:20:37

标签: mysql sql hierarchical-data recursive-query mifos

我有这个递归的SQL查询,我获得每个办公室的ID层次结构(一个办公室属于更高级别的办公室等) - 受@ leftclickben在How to do the Recursive SELECT query in MySQL?中的回答的启发:

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
;

要使此查询起作用,需要验证perferct descendance或ascendance。我的数据未验证此属性,因此我必须在子查询中利用选择性顺序

我获得了非常令人鼓舞的结果(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

0 个答案:

没有答案