mysql使用函数查询树形数据

见:http://blog.csdn.net/qq12547345/article/details/72630285

在做web项目时,经常需要查询出树形数据,比如国家-省-市-区,之前一直使用Java的循环嵌套进行查询,但是多次与数据库交互,效率非常低下,使用mysql函数实现,提高效率。


废话不多说,先上总的数据 
这里写图片描述


现在我要查出所有河南省极其下属的数据,结果如下 
这里写图片描述


效果不错吧,下面是该函数源码

delimiter /
DROP FUNCTION IF EXISTS `mydb`.`getChild`/
CREATE FUNCTION `getChild`(rootId varchar(36))
  RETURNS VARCHAR(1000)
  BEGIN
    DECLARE ptemp VARCHAR(1000);
    DECLARE ctemp VARCHAR(1000);
    SET ptemp = '#';
    SET ctemp = rootId;
    WHILE ctemp IS NOT NULL DO
      SET ptemp = concat(ptemp, ',', ctemp);
      SELECT group_concat(id)
      INTO ctemp
      FROM t_tree_table
      WHERE FIND_IN_SET(pid, ctemp) > 0;
    END WHILE;
    RETURN ptemp;
  END;
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

下面是查询语句,只要在getChild的参数中输入需要查询的父级id即可,

例如示例数据中的 河南 的 id 为 2.

 select * from t_tree_table where find_in_set(id,getChild(2));
 
 
  • 1
  • 1

若要拼接成树控件用的多层级的JSON数据,可以参考该博客另一篇博客 
java+mysql递归拼接树形JSON列表


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值