संपादित करें
गॉर्डन नोट को संबोधित करते हुए काम करने वाला नमूना
क्वेरी नोड पथ की गणना करती है क्योंकि आपने पेड़ की अधिकतम गहराई तय की है, और इसके द्वारा क्रमित करें।
MySQL 5.5.30 स्कीमा सेटअप :
create table mytable(id int, parent_id int, name varchar(100));
insert mytable(id, parent_id, name)
values (1, null, 'Home'),
(2, null, 'Services'),
(3, 2, 'Baking'),
(4, 3, 'Cakes'),
(5, 3, 'Bread'),
(6, 5, 'Flat Bread'),
(7, 1, 'Something');
क्वेरी 1 :
select t0.*,
concat(
case coalesce(t4.Parent_ID, 0)
when 0 then ''
else concat(cast(t4.Parent_ID as char), '\\')
end,
case coalesce(t3.Parent_ID, 0)
when 0 then ''
else concat(cast(t3.Parent_ID as char), '\\')
end,
case coalesce(t2.Parent_ID, 0)
when 0 then ''
else concat(cast(t2.Parent_ID as char), '\\')
end,
case coalesce(t1.Parent_ID, 0)
when 0 then ''
else concat(cast(t1.Parent_ID as char), '\\')
end,
case coalesce(t0.Parent_ID, 0)
when 0 then ''
else concat(cast(t0.Parent_ID as char), '\\')
end,
cast(t0.id as char)
) as path
from mytable t0
left join mytable t1 on t0.Parent_ID = t1.Id
left join mytable t2 on t1.Parent_ID = t2.Id
left join mytable t3 on t2.Parent_ID = t3.Id
left join mytable t4 on t3.Parent_ID = t4.Id
order by
concat(
case coalesce(t4.Parent_ID, 0)
when 0 then ''
else concat(cast(t4.Parent_ID as char), '\\')
end,
case coalesce(t3.Parent_ID, 0)
when 0 then ''
else concat(cast(t3.Parent_ID as char), '\\')
end,
case coalesce(t2.Parent_ID, 0)
when 0 then ''
else concat(cast(t2.Parent_ID as char), '\\')
end,
case coalesce(t1.Parent_ID, 0)
when 0 then ''
else concat(cast(t1.Parent_ID as char), '\\')
end,
case coalesce(t0.Parent_ID, 0)
when 0 then ''
else concat(cast(t0.Parent_ID as char), '\\')
end,
cast(t0.id as char)
)
परिणाम :
| ID | PARENT_ID | NAME | PATH |
-----------------------------------------
| 1 | (null) | Home | 1 |
| 7 | 1 | Something | 1\7 |
| 2 | (null) | Services | 2 |
| 3 | 2 | Baking | 2\3 |
| 4 | 3 | Cakes | 2\3\4 |
| 5 | 3 | Bread | 2\3\5 |
| 6 | 5 | Flat Bread | 2\3\5\6 |