赞
踩
关于mysql的树查询,看网上大部分都是写一个自定义函数,然后调用来实现,但是我不会啊,然后就通过关联表自身实现树查询功能。
我在项目中遇到两类,可能也就是这两类吧。。。一是根据根节点查询出下面所有的子节点(向下递归);二是根据选择的子节点查询出它所在的根节点(向上递归)。两类都通过表关联实现,虽然麻烦,但是还是可以的。记录一下,方便下次在用到不用在思考了 哈哈。
根据根节点查询所有子节点(向下递归):
SELECT distinct e.id FROM c_channel a
INNER JOIN c_channel b ON a.id = b.pid or a.id = b.id
INNER JOIN c_channel c ON b.id = b.pid or b.id = c.id
INNER JOIN c_channel d ON c.id = d.pid or c.id = d.id
INNER JOIN c_channel e ON d.id = e.pid or d.id = e.id
WHERE a.id = '00001'
查询的就是最后关联的那个表(e表),树有几层,就写几个关联。
根据子节点查询根节点(向上递归):
SELECT DISTINCT a.id FROM c_channel a
LEFT JOIN c_channel b ON a.id = b.pid OR a.id = b.id
LEFT JOIN c_channel c ON b.id = c.pid OR b.id = c.id
LEFT JOIN c_channel d ON c.id = d.pid OR c.id = d.id
LEFT JOIN c_channel e ON d.id = e.pid OR d.id = e.id
WHERE e.id = '727' AND a.pid IS NULL
同样,树有几层,就写几个关联。最后条件为最后一个关联表。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。