CALCTOTALGPV_.sql 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. DROP PROCEDURE IF EXISTS `CALCTOTALGPV_`;
  2. delimiter ;;
  3. CREATE PROCEDURE `CALCTOTALGPV_`(IN `PLAYER` INT, -- 第几层
  4. IN `PMINLAYER` INT)
  5. BEGIN
  6. DECLARE
  7. FLAG,
  8. MLAYER,
  9. MINTLAYER,
  10. MUSERTYPE,
  11. MINTTYPE INT DEFAULT 0;
  12. DECLARE
  13. MGPV DECIMAL ( 10, 2 );
  14. DECLARE
  15. MUSERID,
  16. MUSERINTID,
  17. MINTUSERID,
  18. MINTRODUCERID VARCHAR ( 50 );
  19. DECLARE
  20. MC CURSOR FOR SELECT
  21. C.USER_ID,
  22. C.INTRODUCER_ID,
  23. C.USER_TYPE,
  24. C.GPV
  25. FROM
  26. (
  27. SELECT
  28. USER_ID,
  29. IFNULL( INTRODUCER_ID, '0' ) INTRODUCER_ID,
  30. USER_TYPE,
  31. GPV
  32. FROM
  33. AR_BS_BONUS_103_CALC_NET
  34. WHERE
  35. LAYER = PLAYER
  36. AND GPV > 0
  37. OR ( GPV = 0 AND USER_TYPE = 30 )
  38. ORDER BY
  39. USER_ID DESC
  40. ) C;
  41. DECLARE
  42. CONTINUE HANDLER FOR NOT FOUND
  43. SET FLAG = 1;
  44. START TRANSACTION;-- 打开游标
  45. OPEN MC;-- 获取结果
  46. L2 :
  47. LOOP
  48. FETCH MC INTO MUSERID,
  49. MUSERINTID,
  50. MUSERTYPE,
  51. MGPV;
  52. IF
  53. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  54. LEAVE L2;
  55. END IF;
  56. SET MLAYER = PLAYER;
  57. SET MINTUSERID = MUSERINTID;
  58. IF
  59. ( MINTUSERID != '0' ) THEN
  60. OUTLABEL :
  61. WHILE
  62. MLAYER > PMINLAYER DO
  63. SELECT
  64. INTRODUCER_ID,
  65. USER_TYPE,
  66. LAYER INTO MINTRODUCERID,
  67. MINTTYPE,
  68. MLAYER
  69. FROM
  70. AR_BS_BONUS_103_CALC_NET
  71. WHERE
  72. USER_ID = MINTUSERID;
  73. IF
  74. ( MINTUSERID != MUSERINTID AND MINTTYPE = 30 ) THEN
  75. UPDATE AR_BS_BONUS_103_CALC_NET
  76. SET TEAM_GPV = TEAM_GPV + MGPV
  77. WHERE
  78. USER_ID = MINTUSERID;
  79. IF
  80. ( MUSERTYPE = 30 ) THEN
  81. UPDATE AR_BS_BONUS_103_CALC_NET
  82. SET INTRODUCER_ID30 = MINTUSERID
  83. WHERE
  84. USER_ID = MUSERID
  85. AND INTRODUCER_ID30 IS NULL;
  86. END IF;
  87. LEAVE OUTLABEL;
  88. END IF;
  89. SET MINTUSERID = MINTRODUCERID;
  90. END WHILE;
  91. END IF;-- 关闭游标
  92. END LOOP;
  93. CLOSE MC;
  94. COMMIT;
  95. END
  96. ;;