算法倒是可以写出来,但是需要遍历一遍,每遍历到一个节点都要select 一次,CPU会累劈的如果楼主有求层的需求,那么把你的元组中在加入一个level的属性,每次有新的叶ID生成那么他的level值直接取parentID的level值++,这样想求层数可以用select max(level)的办法同时也可以有group by level等诸多好处,所以........呵呵
调试欢乐多
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,得出最大值就是结果了
select t1.id from test1 t1 left join test1 t2 on t1.id=t2.pid where t2.pid is null group by t1.pid;把同一个父节点下的所有叶子只选一个
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
if (上述插入SQL语句返回affected rows为0)
break; nLevel++;
}以上所写的SQL语句需要mysql4.0版本以上,如果是老版本,可以根据这种思路每个循环使用多个SQL语句实现