Я смог сделать это в Rails с рекурсией:
def add_self_and_children
[self, children.sort_by{|e| e.name}.map{|c| c.add_self_and_children}].flatten
end
Затем позвоните Model.root.add_self_and_children
.
Но очевидно, что это включает в себя серию массивных обращений к базе данных.
Так что если кто-то, кто знает больше о рекурсии SQL, чем я, хочет преобразовать это в чистый SQL, это было бы волшебно!
Кстати, по какой-то причине следующее, что было бы немного добрее в базе данных, не сработало:
def add_self_and_children
[self, children.order(:name).map{|c| c.add_self_and_children}].flatten
end