BEGIN

DECLARE sTemp TEXT ;

/*父id*/

DECLARE recomsTempChd TEXT ;

/*子id*/

DECLARE v_memberno INT DEFAULT 0 ;

DECLARE v_arraymemberno INT DEFAULT 0 ;

DECLARE v_recommemberno INT DEFAULT 0 ;

DECLARE v_typeprice INT DEFAULT 0 ;

DECLARE v_avg_cash INT DEFAULT 0 ;

DECLARE v_avg_integral INT DEFAULT 0 ;

DECLARE v_count INT DEFAULT 0 ;

DECLARE v_count1 INT DEFAULT 0 ;

DECLARE v_count2 INT DEFAULT 0 ;

DECLARE v_count3 INT DEFAULT 0 ;

DECLARE v_type INT DEFAULT 0 ;

DECLARE v_jixiaoall DECIMAL DEFAULT 0 ;

DECLARE v_child1000count INT DEFAULT 0 ;

DECLARE v_node10000 TEXT DEFAULT '' ;

DECLARE v_node10000count INT DEFAULT 0 ;

DECLARE v_node20w TEXT DEFAULT '' ;

DECLARE v_node100w TEXT DEFAULT '' ;

DECLARE v_node300w TEXT DEFAULT '' ;

DECLARE v_node900w TEXT DEFAULT '' ;

DECLARE add20wprice DECIMAL DEFAULT 0 ;

DECLARE add100wprice DECIMAL DEFAULT 0 ;

DECLARE add300wprice DECIMAL DEFAULT 0 ;

DECLARE add900wprice DECIMAL DEFAULT 0 ;

DECLARE add20wchildcount INT DEFAULT 0 ;

DECLARE add100wchildcount INT DEFAULT 0 ;

DECLARE add300wchildcount INT DEFAULT 0 ;

DECLARE add900wchildcount INT DEFAULT 0 ;

DECLARE done INT DEFAULT - 1 ;

DECLARE mycur CURSOR FOR

SELECT

memberno

FROM

fathermembernos ;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1 ;

SET sTemp = `getfatherNode` (membernos) ;

SET recomsTempChd = `getRcommFather` (membernos) ;

SELECT

typeprice,

recommmemberno,

`type` INTO v_typeprice,

v_recommemberno,

v_type

FROM

member m

WHERE m.memberno IN (membernos) ;

#设置总业绩和新增业绩\会员数量

CASE

v_type

WHEN 1

THEN

UPDATE

member_achievement

SET

allachievement = allachievement + v_typeprice,

okachievement = okachievement + v_typeprice,

newachievement=newachievement+v_typeprice,

microtype = microtype + 1

WHERE FIND_IN_SET(memberno, sTemp) > 0

AND memberno != membernos ;

WHEN 2

THEN

UPDATE

member_achievement

SET

allachievement = allachievement + v_typeprice,

okachievement = okachievement + v_typeprice,

newachievement=newachievement+v_typeprice,

quicktype = quicktype + 1

WHERE FIND_IN_SET(memberno, sTemp) > 0

AND memberno != membernos ;

WHEN 3

THEN

UPDATE

member_achievement

SET

allachievement = allachievement + v_typeprice,

okachievement = okachievement + v_typeprice,

newachievement=newachievement+v_typeprice,

startype = startype + 1

WHERE FIND_IN_SET(memberno, sTemp) > 0

AND memberno != membernos ;

END CASE ;

#直接推荐奖20%

UPDATE

member_achievement

SET

notrecommend = notrecommend + (v_typeprice * 0.2),

getcash = getcash + (v_typeprice * 0.2),

newrecommend=newrecommend+(v_typeprice * 0.2)

WHERE memberno = v_recommemberno ;

#垂直推荐奖4%

UPDATE

member_achievement

SET

newverticalaward = newverticalaward + (v_typeprice * 0.04),

getcash = getcash + (v_typeprice * 0.04),

verticalaward=verticalaward++ (v_typeprice * 0.04)

WHERE memberno IN

(SELECT

recommmemberno

FROM

member

WHERE memberno = v_recommemberno) ;

#跨区推荐奖%6

UPDATE

member_achievement

SET

newcrossaward = newcrossaward + (v_typeprice * 0.06),

getcash = getcash + (v_typeprice * 0.06),

crossaward=crossaward++ (v_typeprice * 0.06)

WHERE memberno IN

(SELECT

recommmemberno

FROM

member

WHERE memberno IN

(SELECT

recommmemberno

FROM

member

WHERE memberno = v_recommemberno)) ;

SELECT

COUNT(1) INTO v_count1

FROM

member m,member_achievement a

WHERE m.bonus = 0 AND m.memberno=a.memberno

AND m.`type` = 1

AND a.marketshare < 5000

AND m.memberno IN

(SELECT

memberno

FROM

member

WHERE recommmemberno = membernos) ;

SELECT

COUNT(1) INTO v_count2

FROM

member m,member_achievement a

WHERE m.bonus = 0 AND m.memberno=a.memberno

AND m.`type` = 2

AND a.marketshare < 25000 ;

SELECT

COUNT(1) INTO v_count3

FROM

member m,member_achievement a

WHERE m.bonus = 0 AND m.memberno=a.memberno

AND m.`type` = 3

AND a.marketshare < 75000 ;

SET v_count = 1*v_count1 + 4*v_count2 + 10*v_count3 ;

IF v_count > 0

THEN

SELECT

ROUND(v_typeprice/(10*v_count * 2),1),

ROUND(v_typeprice/(10*v_count * 2),1) INTO v_avg_cash,

v_avg_integral

FROM

DUAL ;

END IF ;

##市场分红奖励

UPDATE

member_achievement a,member m

SET

a.getcash = a.getcash +

CASE

WHEN (v_avg_cash + a.marketshare) > 5000

THEN (v_avg_cash + a.marketshare) - 5000

ELSE v_avg_cash

END,

a.integral = a.integral +

CASE

WHEN (v_avg_integral + a.marketinetegral) > 5000

THEN (v_avg_integral + a.marketinetegral) - 5000

ELSE v_avg_integral

END,

a.marketinetegral =

CASE

WHEN (v_avg_integral + a.marketinetegral) > 5000

THEN 5000

ELSE v_avg_integral + a.marketinetegral

END,

a.marketshare =

CASE

WHEN (v_avg_cash + a.marketshare) > 5000

THEN 5000

ELSE v_avg_cash + a.marketshare

END,

a.newmarketinetegral =

CASE

WHEN (v_avg_integral + a.marketinetegral) > 5000

THEN 0

ELSE v_avg_integral + a.newmarketinetegral

END,

a.newmarketshare =

CASE

WHEN (v_avg_cash + a.marketshare) > 5000

THEN 0

ELSE v_avg_cash + a.newmarketshare

END

WHERE a.memberno=m.memberno AND m.bonus = 0

AND m.`type` = 1

AND a.marketshare < 5000

AND EXISTS

(SELECT

1

FROM

member

WHERE recommmemberno = a.memberno) ;

UPDATE

member_achievement a,member m

SET

a.getcash = a.getcash +

CASE

WHEN (v_avg_cash + marketshare) > 25000

THEN (v_avg_cash + marketshare) - 25000

ELSE v_avg_cash

END,

a.integral = a.integral +

CASE

WHEN (v_avg_integral + a.marketinetegral) > 25000

THEN (v_avg_integral + a.marketinetegral) - 25000

ELSE v_avg_integral

END,

a.marketinetegral =

CASE

WHEN (v_avg_integral + a.marketinetegral) > 25000

THEN 25000

ELSE v_avg_cash + a.marketinetegral

END,

a.marketshare =

CASE

WHEN (v_avg_cash + a.marketshare) > 25000

THEN 25000

ELSE v_avg_cash + a.marketshare

END ,

a.newmarketinetegral =

CASE

WHEN (v_avg_integral + a.marketinetegral) > 25000

THEN 0

ELSE v_avg_cash + a.newmarketinetegral

END,

a.newmarketshare =

CASE

WHEN (v_avg_cash + a.marketshare) > 25000

THEN 0

ELSE v_avg_cash + a.newmarketshare

END

WHERE a.memberno=m.memberno AND m.bonus = 0

AND m.`type` = 2 ;

UPDATE

member_achievement a,member m

SET

a.getcash = a.getcash +

CASE

WHEN (v_avg_cash + a.marketshare) > 75000

THEN (v_avg_cash + a.marketshare) - 75000

ELSE v_avg_cash

END,

a.integral = a.integral +

CASE

WHEN (v_avg_integral + a.marketinetegral) > 75000

THEN (v_avg_integral + a.marketinetegral) - 75000

ELSE v_avg_integral

END,

a.marketinetegral =

CASE

WHEN (v_avg_integral + a.marketinetegral) > 75000

THEN 75000

ELSE v_avg_cash + a.marketinetegral

END,

a.marketshare =

CASE

WHEN (v_avg_cash + a.marketshare) > 75000

THEN 75000

ELSE v_avg_cash + a.marketshare

END,

a.newmarketinetegral =

CASE

WHEN (v_avg_integral + a.marketinetegral) > 75000

THEN 0

ELSE v_avg_cash + a.newmarketinetegral

END,

a.newmarketshare =

CASE

WHEN (v_avg_cash + a.marketshare) > 75000

THEN 0

ELSE v_avg_cash + a.newmarketshare

END

WHERE a.memberno=m.memberno AND m.bonus = 0

AND m.`type` = 3 ;

##绩效分红和董事分红处理

TRUNCATE TABLE `fathermembernos` ;

INSERT INTO fathermembernos (memberno)

SELECT

a.memberno

FROM

member m,

member_achievement a

WHERE m.bonus = 0

AND m.state = 1

AND a.memberno = m.memberno

AND allachievement > 200000

AND FIND_IN_SET(m.memberno, sTemp) > 0

AND a.memberno != membernos ;

SET v_node10000 = '$' ;

SET v_node10000count = 0 ;

OPEN mycur ;

myLoop :

LOOP

-- 提取游标里的数据,这里只有一个,多个的话也一样;

FETCH mycur INTO v_memberno ;

#CALL `accountAllYeji`(v_memberno,v_typeprice);

SELECT

allachievement INTO v_jixiaoall

FROM

member_achievement

WHERE memberno = v_memberno ;

IF v_jixiaoall > 10000000

THEN

SELECT

COUNT(*) INTO v_child1000count

FROM

member_achievement a,

member m

WHERE a.memberno = m.memberno

AND m.state = 1

AND a.memberno IN

(SELECT

memberno

FROM

member

WHERE recommmemberno = v_memberno)

AND allachievement > 1000000 ;

IF v_child1000count > 0

THEN SET v_node10000 = CONCAT(v_node10000, v_memberno) ;

SET v_node10000count = v_node10000count + 1 ;

END IF ;

ELSE ##处理20万

IF v_jixiaoall > 200000

AND v_jixiaoall <= 1000000

THEN

SELECT

COUNT(*) INTO add20wchildcount

FROM

member_achievement a,

member m

WHERE a.memberno = m.memberno

AND m.state = 1

AND a.memberno IN

(SELECT

memberno

FROM

member

WHERE recommmemberno = v_memberno)

AND allachievement > 2000000 ;

IF add20wchildcount = 0

THEN SET add20wprice = v_typeprice ;

IF v_jixiaoall - 200000 < v_typeprice

THEN SET add20wprice = v_jixiaoall - 200000 ;

END IF ;

IF add20wprice > 0

THEN

UPDATE

member_achievement

SET

integral = integral + add20wprice * 0.08 * 0.1,

newbmoney = newbmoney + add20wprice * 0.08 * 0.9,

bmoney = bmoney + add20wprice * 0.08 * 0.9,

getcash = getcash + add20wprice * 0.08 * 0.9 where memberno=v_memberno ;

END IF ;

END IF ;

##处理100万

ELSEIF v_jixiaoall > 1000000

AND v_jixiaoall <= 3000000

THEN

SELECT

COUNT(*) INTO add100wchildcount

FROM

member_achievement a,

member m

WHERE a.memberno = m.memberno

AND m.state = 1

AND a.memberno IN

(SELECT

memberno

FROM

member

WHERE recommmemberno = v_memberno)

AND allachievement > 10000000 ;

IF add100wchildcount = 0

THEN SET add100wprice = v_typeprice ;

IF v_jixiaoall - 1000000 < v_typeprice

THEN SET add100wprice = v_jixiaoall - 1000000 ;

END IF ;

IF add100wprice > 0

THEN IF add20wprice > 0

THEN

UPDATE

member_achievement

SET

integral = integral + add20wprice * 0.04 * 0.1,

newbmoney = newbmoney + add20wprice * 0.04 * 0.9,

bmoney = bmoney + add20wprice * 0.04 * 0.9,

getcash = getcash + add20wprice * 0.04 * 0.9 where memberno=v_memberno ;

ELSE

UPDATE

member_achievement

SET

integral =  integral + add20wprice * 0.12 * 0.1,

newbmoney = newbmoney + add20wprice * 0.12 * 0.9,

bmoney = bmoney + add20wprice * 0.12 * 0.9,

getcash = getcash + add20wprice * 0.12 * 0.9 where memberno=v_memberno ;

END IF ;

END IF ;

END IF ;

##处理300万

ELSEIF v_jixiaoall > 3000000

AND v_jixiaoall <= 9000000

THEN

SELECT

COUNT(*) INTO add300wchildcount

FROM

member_achievement a,

member m

WHERE a.memberno = m.memberno

AND m.state = 1

AND a.memberno IN

(SELECT

memberno

FROM

member

WHERE recommmemberno = v_memberno)

AND allachievement > 30000000 ;

IF add300wchildcount = 0

THEN SET add300wprice = v_typeprice ;

IF v_jixiaoall - 3000000 < v_typeprice

THEN SET add300wprice = v_jixiaoall - 3000000 ;

END IF ;

IF add300wprice > 0

THEN IF add20wprice > 0

OR add100wprice > 0

THEN

UPDATE

member_achievement

SET

integral = integral + add20wprice * 0.04 * 0.1,

newbmoney = newbmoney + add20wprice * 0.04 * 0.9,

bmoney = bmoney + add20wprice * 0.04 * 0.9,

getcash = getcash + add20wprice * 0.04 * 0.9 where memberno=v_memberno ;

ELSE

UPDATE

member_achievement

SET

integral = integral + add20wprice * 0.16 * 0.1,

newbmoney = newbmoney + add20wprice * 0.16 * 0.9,

bmoney = bmoney + add20wprice * 0.16 * 0.9,

getcash = getcash + add20wprice * 0.16 * 0.9  where memberno=v_memberno ;

END IF ;

END IF ;

END IF ;

##处理900万

ELSEIF v_jixiaoall > 9000000

THEN

SELECT

COUNT(*) INTO add900wchildcount

FROM

member_achievement a,

member m

WHERE a.memberno = m.memberno

AND m.state = 1

AND a.memberno IN

(SELECT

memberno

FROM

member

WHERE recommmemberno = v_memberno)

AND allachievement > 90000000 ;

IF add900wchildcount = 0

THEN SET add900wprice = v_typeprice ;

IF v_jixiaoall - 3000000 < v_typeprice

THEN SET add900wprice = v_jixiaoall - 9000000 ;

END IF ;

IF add900wprice > 0

THEN IF add20wprice > 0

OR add100wprice > 0

OR add300wprice > 0

THEN

UPDATE

member_achievement

SET

integral = integral + add20wprice * 0.04 * 0.1,

newbmoney = newbmoney + add20wprice * 0.04 * 0.9,

bmoney = bmoney + add20wprice * 0.04 * 0.9,

getcash = getcash + add20wprice * 0.04 * 0.9 where memberno=v_memberno ;

ELSE

UPDATE

member_achievement

SET

integral = integral + add20wprice * 0.2 * 0.1,

newbmoney = newbmoney + add20wprice * 0.2 * 0.9,

bmoney = bmoney + add20wprice * 0.2 * 0.9,

getcash = getcash + add20wprice * 0.2 * 0.9 where memberno=v_memberno ;

END IF ;

END IF ;

END IF ;

END IF ;

END IF ;

-- 声明结束的时候

IF done = 1

THEN LEAVE myLoop ;

END IF ;

-- 这里做你想做的循环的事件

END LOOP myLoop ;

-- 关闭游标

CLOSE mycur ;

UPDATE

member_achievement

SET

getcash = getcash + ROUND((v_typeprice * 0.03) / v_node10000count,1),

newdongshimoney = newdongshimoney + ROUND((v_typeprice * 0.03) / v_node10000count,1)

WHERE FIND_IN_SET(memberno, v_node10000) > 0 ;

END

mysql无级分销_3级分销(mysql存储过程写法)相关推荐

  1. php查询mysql表里的数据_3.php查询mysql数据表所有记录

    // 第一步:连接 mysql 服务器. $con = mysql_connect("localhost","root","start_2011&qu ...

  2. mysql安全补丁如何处理_3分钟学会mysql数据库的逻辑架构原理

    这篇文章主要是从mysql数据库的逻辑架构来认识掌握mysql的原理.只要是稍微有一点计算机的相关知识相信都能看明白. 一.笼统的逻辑架构 先给出一张逻辑架构图,这张图是让你从宏观的角度来分析认识一下 ...

  3. mysql主从1594错误_3分钟解决MySQL主从1594错误

    3分钟解决MySQL主从1594错误简介 Part1:写在最前 1594这个错误看起来挺严重的,会提示你binlog文件或者Relay log损坏了,例如binary log is corrupted ...

  4. MySQL无中心化集群_MySQL Plus 如何做到无中心化、数据强一致性、秒级切换?

    数据库服务于企业的核心交易业务和实时交互应用,承载着企业的核心数据,因此企业对于数据库的数据一致性和高可用性有强烈的需求. 本次内容为青云QingCloud 数据库工程师蒙哲在 3306Pai 201 ...

  5. mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  6. mysql行级锁unique_MySQL行级锁,表级锁,页级锁详解

    页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...

  7. MySQL数据库事务中的行级锁,表级锁,页级锁

    锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...

  8. mysql面试常问 1: 谈谈MySQL表级锁和行级锁

    谈谈MySQL表级锁和行级锁 表级锁与索引无关 行级锁与索引的关系呢??答案是有关系的,但是要具体分析不同情况 主键索引与 行级锁的关系 非主键索引与行级锁的关系 实验如下: CREATE TABLE ...

  9. kotlin mysql数据库_在kotlin中使用mysql行级锁

    mysql中的锁 首先需要介绍一下mysql的锁.一般我们使用InnoDB数据库引擎+行级锁,SQL为:SELECT * FROM table where id = 1 for update;.for ...

最新文章

  1. 括号匹配算法 java_使用栈实现括号匹配算法-java
  2. 说明使用assert和防错代码的区别
  3. Java内存模型与指令重排
  4. VTK:图片之DrawOnAnImage
  5. css设置 ul的内外边距,9月3日学习CSS选择器,背景设置,及内外边距知识总结
  6. Linux命令之diff
  7. 计算机应用第7章在线测试,《计算机应用基础》第07章在线测试
  8. centos7 挂载镜像盘 LVM处理的不合理
  9. private访问权限java_Java 访问权限控制:public、private、protected
  10. hbase数据库使用
  11. 云存储收银系统_爱宝云收银系统
  12. 房产交易进化:探索“去中介”无人区
  13. 川希:哪些网站百度收录快排名好,高权重网站必收藏!
  14. 多少秒算长镜头_什么是长镜头画面(电影里的长镜头有哪些分类)
  15. Python Numpy的数组array和矩阵matrix
  16. 90后HTTP 的爱情故事
  17. 为什么阿里会选择 Flink 作为新一代流式计算引擎?
  18. Bootstrap3动态添加的元素tooltip不生效
  19. 火狐中无法打开google的搜索结果的解决方式
  20. ExpandableListView讲解

热门文章

  1. Spring Cloud 2020 年路线图:二季度Spring Boot 2.3、四季度Spring Cloud Ilford
  2. 白话:服务降级与熔断的区别
  3. c++智能指针 示例讲解
  4. pytorch判断NaN
  5. torch 多进程卡死
  6. 无法解析的外部符号 class boost::system::error_category const __cdecl boost::system::system_category(void)
  7. test argument is not supported anymore. Use chainer.using_config
  8. python 文件名相关
  9. _matroska_decode_buffer in
  10. This version of MySQL doesn't yet support 'LIMIT IN/ALL/ANY/SOME subquery'