MYSQL无限极分类递归向上向下查询SQL语句实现
使用sql实现递归向上向下查询
在开发中经常使用无限极分类表,经常需要查询父级分类下所有子分类(递归向下查询);也会根据子级分类去查询出层级(递归向上查询)。这个时候大多数会用代码实现,也可能考虑自定义SQL函数来实现,当然也有简单的方法直接用SQL语句来实现。
使用sql语句实现查询父级分类下所有子分类(递归向上查询)
SELECT sd.id
FROM table_name
AND FIND_IN_SET(id, (
SELECT ifnull(max(ischild),
SELECT t1.id,t1.parent_id,IF (FIND_IN_SET(parent_id,@pids)> 0,@pids :=concat(@pids,',',id),'N') AS ischild FROM (
SELECT id,parent_id FROM table_name t ORDER BY t.sort) t1,(
SELECT @pids :=
))
使用sql语句实现根据子级分类查询所在层级(递归向上查询)
SELECT sd.*
FROM table_name
AND FIND_IN_SET(id, (
SELECT ifnull(max(ischild),
SELECT t1.id,t1.parent_id,IF (FIND_IN_SET( id, @pids) > 0,@pids :=concat(@pids,',',parent_id),'N') AS ischild FROM (
SELECT id, parent_id FROM table_name t ORDER BY t.sort desc) t1,(
SELECT @pids :=
))
使用了FIND_IN_SET(str,strlist)函数
第一个参数:字段
第二个参数:以逗号作为分割根据的字符串
查询的结果集为: str在strlist中的结果集
|