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

来源:互联网 发布:php cgi 管理程序 编辑:程序博客网 时间:2024/05/29 19:41
1.先说下本文的背景以及结合什么样的需求作出具体的功能:
最近本人公司半道子不知道老板从哪旮沓里(老板应该不看这类技术型博客,O(∩_∩)O)接手了一个半吊子项目来(接盘侠),先不谈这个项目是咋滴咋滴的。这个项目的注册逻辑是有推荐关系的,分推荐注册和无推荐注册两种,这样的话就会形成一条推荐关系链,但是前期开发项目的人没有在数据库维护好这个推荐关系链,导致到了我们这里这些是没有数据的,因此需要根据每个有推荐人的用户来把他们的推荐关系链修复好,也就是根据用户自己的推荐人获取到推荐人的id,然后再通过推荐人id的推荐人去查找上一级的推荐人,以此类推,最后以推荐人id-推荐人id的形式形成一条推荐关系链,最前面的就是最早注册的哪个人,最末端就是用户自己的推荐人。
2.本人由于也不是经常写存储过程,因此也是网上查找了很多资料,本次需求的逻辑也就是通过游标进行循环遍历,然后判断,赋值等一系列操作,先查找出全部的用户id,然后通过定义游标赋值给游标,然后进行循环(这个循环和iterator很类似),好了 废话结束,上sql,希望这个能帮到看本篇博文的你。
CREATE DEFINER=`admin`@`%` PROCEDURE `updateRecommended`()BEGINDECLARE 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: LOOPFETCH NEXT FROM my_cursor INTO my_id;IF done THENLEAVE 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 != '' DOSET 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

纯手打,如有雷同,肯定是抄袭~~
阅读全文
0 0
原创粉丝点击