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
純手打,如有雷同,肯定是抄襲~~
mysql存儲過程+遊標循環遍歷 判斷 賦值 等實例一
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.