MySQL存储过程,用于对链表进行排序

MySQL存储过程,用于对链表进行排序,mysql,stored-procedures,data-structures,linked-list,Mysql,Stored Procedures,Data Structures,Linked List,我有一个链表 id | parent 1 | 1 2 | 1 3 | 2 4 | 3 ... 我知道mysql没有内置的查询树构建功能,但我想知道是否有人使用存储过程来执行这种排序。目前,我正在我的域代码中执行排序,但是外部系统读取的表和外部系统的性能是最重要的,因此我想为其提供一个已排序的列表,以避免使用其宝贵的CPU周期 我们欢迎其他建议,因为这仍处于设计阶段。MySQL没有Oracle提供的方便的START WITH/CONNECT BY语法,但是,您可能想从尝试在MySQL中模

我有一个链表

id | parent
1  | 1
2  | 1
3  | 2
4  | 3
...
我知道mysql没有内置的查询树构建功能,但我想知道是否有人使用存储过程来执行这种排序。目前,我正在我的域代码中执行排序,但是外部系统读取的表和外部系统的性能是最重要的,因此我想为其提供一个已排序的列表,以避免使用其宝贵的CPU周期


我们欢迎其他建议,因为这仍处于设计阶段。

MySQL没有Oracle提供的方便的
START WITH/CONNECT BY
语法,但是,您可能想从尝试在MySQL中模拟相同功能的人那里了解一下。

我已经在2011年10月24日的DBA StackExchange中解决了这个问题:

在我的回答中,我包括了基于该问题的存储过程和示例数据


试试看

谢谢你的链接。我有一个问题,列表以0开头,我的列表以1=1作为根开始。原因是,如果使用0,则不能在列上使用外键,当根的父项等于它自己时,该列的外键等于。您对此有何看法?我以前曾将其用于分层查询,效果很好。它来自同一个站点,我更喜欢他的方法,而不是我见过的存储proc/temp表方法。他实际上给出了一个相当简单的查询,以在给定一个叶时获得树的层次结构(另一种方法是根->叶,这有点复杂)