建议:创建另一个表(如果实在不想添加或更改原有结构的话,就当作临时表吧),包含id、parentid、level,然后对原数据计算每个元组的level,思路如下:
1. 首先得到根节点的信息,并插入新表,level为1
2. 设置变量nLevel=1
while (1)
{
INSERT INTO new_table
SELECT old_table.id, old_table.parentid, nLevel+1 FROM old_table
LEFT JOIN new_table ON old_table.pid=new_table.id
WHERE new_table.level=nLevel
1. 首先找到所有叶子,方法如下:
select t1.id from test1 t1 left join test1 t2 on t1.id=t2.pid where t2.pid is null
其中test1假设为你的表名,pid为parentid
2. 再找到一种方法计算某个元组的level,即它处在第几层(我还没想好方法,呵呵)
3. 计算所有叶子的level,得出最大值就是结果了