mysql查询树结构 定义函数

网上大把,百度也有。下面是我加上一些注释,方便下次使用。

修改一下函数,然后就可以使用了。

/* 查询树结构函数 mysql可用 */

DROP FUNCTION IF EXISTS queryUpmsMenuTree; /*函数名*/
CREATE FUNCTION `queryUpmsMenuTree` (PARAM_ID VARCHAR(32)) /*传入参数*/
RETURNS VARCHAR(4000) 
BEGIN 
DECLARE sTemp VARCHAR(4000); 
DECLARE sTempChd VARCHAR(4000); 
 
SET sTemp = '$'; 
SET sTempChd = PARAM_ID; /*传入参数替换给临时变量*/
 
WHILE sTempChd is not NULL DO 
SET sTemp = CONCAT(sTemp,',',sTempChd); 
/* 下面要修改C_ID(当前ID字段名)、T_UPMS_MENU(表名)、C_PID(父ID字段名) */
SELECT group_concat(C_ID) INTO sTempChd FROM T_UPMS_MENU where FIND_IN_SET(C_PID,sTempChd)>0; 
END WHILE; 
return sTemp; 
END; 
//

测试例句:
select queryUpmsMenuTree('-1');
select C_MENU_NAME from T_UPMS_MENU where FIND_IN_SET(C_ID, queryUpmsMenuTree('-1')); 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您要在MySQL查询形结构的某一个汇总值,可以使用递归查询(Recursive Query)来实现。递归查询是指在查询中嵌套使用自身的查询,从而实现对形结构的遍历操作。 假设您的形结构数据模型是这样的: ```sql CREATE TABLE category ( id INT PRIMARY KEY, name VARCHAR(100), parent_id INT ); INSERT INTO category VALUES (1, '电器', NULL), (2, '手机', 1), (3, '电视', 1), (4, '华为', 2), (5, '小米', 2), (6, '索尼', 3), (7, '三星', 3), (8, '笔记本', 1), (9, 'ThinkPad', 8), (10, '戴尔', 8); ``` 现在,假设您要查询所有属于“手机”类别的商品的库存总量,可以使用以下SQL语句: ```sql WITH RECURSIVE sub_categories AS ( SELECT id FROM category WHERE name = '手机' UNION ALL SELECT c.id FROM category c JOIN sub_categories sc ON c.parent_id = sc.id ) SELECT SUM(stock) AS total_stock FROM product WHERE category_id IN (SELECT id FROM sub_categories); ``` 上述SQL语句使用了WITH RECURSIVE子句定义了一个递归查询查询出了所有属于“手机”类别的子孙节点的ID。然后,在主查询中使用了SUM函数计算所有符合条件的商品的库存总量。 需要注意的是,上述查询中用到了两个表:`category`表和`product`表,其中`category`表存储了形结构的数据,而`product`表存储了商品信息和库存信息。在查询时需要将两个表进行JOIN操作,并根据`category`表中的层级关系来查询出符合条件的所有商品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值