mysql存储过程+游标循环遍历 判断 赋值 等实例一

1.先说下本文的背景以及结合什么样的需求作出具体的功能:
最近本人公司半道子不知道老板从哪旮沓里(老板应该不看这类技术型博客,O(∩_∩)O)接手了一个半吊子项目来(接盘侠),先不谈这个项目是咋滴咋滴的。这个项目的注册逻辑是有推荐关系的,分推荐注册和无推荐注册两种,这样的话就会形成一条推荐关系链,但是前期开发项目的人没有在数据库维护好这个推荐关系链,导致到了我们这里这些是没有数据的,因此需要根据每个有推荐人的用户来把他们的推荐关系链修复好,也就是根据用户自己的推荐人获取到推荐人的id,然后再通过推荐人id的推荐人去查找上一级的推荐人,以此类推,最后以推荐人id-推荐人id的形式形成一条推荐关系链,最前面的就是最早注册的哪个人,最末端就是用户自己的推荐人。
2.本人由于也不是经常写存储过程,因此也是网上查找了很多资料,本次需求的逻辑也就是通过游标进行循环遍历,然后判断,赋值等一系列操作,先查找出全部的用户id,然后通过定义游标赋值给游标,然后进行循环(这个循环和iterator很类似 ),好了 废话结束,上sql,希望这个能帮到看本篇博文的你。
CREATE DEFINER=`admin`@`%` PROCEDURE `updateRecommended`()
BEGIN
	DECLARE my_recommended INT;
	DECLARE my_id INT;
	DECLARE inviteRelationStr VARCHAR(10000);
	-- 创建自定义控制游标循环变量
	DECLARE done TINYINT DEFAULT FALSE;
	-- 创建自定义游标 并输入结果集
	DECLARE my_cursor CURSOR FOR (SELECT id FROM hft_user);
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

	SET inviteRelationStr = '';

	-- 打开游标
	OPEN my_cursor;
	-- 循环开始
	my_loop: LOOP
		FETCH NEXT FROM my_cursor INTO my_id;

	
			IF done THEN
				LEAVE my_loop;
			END IF;	
			-- 开始操作
			SELECT recommended INTO my_recommended FROM hft_user WHERE id = my_id;
			

			WHILE my_recommended IS NOT NULL OR my_recommended != '' DO
				SET inviteRelationStr = CONCAT(my_recommended,'-',inviteRelationStr);
				SELECT recommended INTO my_recommended FROM hft_user WHERE id = my_recommended;
			END WHILE;

			-- 修改推荐连
			UPDATE hft_user SET invite_relation = inviteRelationStr WHERE id = my_id;
			
			SET inviteRelationStr = '';
			-- 提交事务
			COMMIT;
			
	END LOOP my_loop;
	
	CLOSE my_cursor;	-- 关闭游标
END

纯手打,如有雷同,肯定是抄袭~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值