mysql无级分销_3级分销(mysql存储过程写法)
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存储过程写法)相关推荐
- php查询mysql表里的数据_3.php查询mysql数据表所有记录
// 第一步:连接 mysql 服务器. $con = mysql_connect("localhost","root","start_2011&qu ...
- mysql安全补丁如何处理_3分钟学会mysql数据库的逻辑架构原理
这篇文章主要是从mysql数据库的逻辑架构来认识掌握mysql的原理.只要是稍微有一点计算机的相关知识相信都能看明白. 一.笼统的逻辑架构 先给出一张逻辑架构图,这张图是让你从宏观的角度来分析认识一下 ...
- mysql主从1594错误_3分钟解决MySQL主从1594错误
3分钟解决MySQL主从1594错误简介 Part1:写在最前 1594这个错误看起来挺严重的,会提示你binlog文件或者Relay log损坏了,例如binary log is corrupted ...
- MySQL无中心化集群_MySQL Plus 如何做到无中心化、数据强一致性、秒级切换?
数据库服务于企业的核心交易业务和实时交互应用,承载着企业的核心数据,因此企业对于数据库的数据一致性和高可用性有强烈的需求. 本次内容为青云QingCloud 数据库工程师蒙哲在 3306Pai 201 ...
- mysql行级锁 表级锁 页级锁详细介绍_MySQL行级锁、表级锁、页级锁详细介绍
页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...
- mysql行级锁unique_MySQL行级锁,表级锁,页级锁详解
页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...
- MySQL数据库事务中的行级锁,表级锁,页级锁
锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...
- mysql面试常问 1: 谈谈MySQL表级锁和行级锁
谈谈MySQL表级锁和行级锁 表级锁与索引无关 行级锁与索引的关系呢??答案是有关系的,但是要具体分析不同情况 主键索引与 行级锁的关系 非主键索引与行级锁的关系 实验如下: CREATE TABLE ...
- kotlin mysql数据库_在kotlin中使用mysql行级锁
mysql中的锁 首先需要介绍一下mysql的锁.一般我们使用InnoDB数据库引擎+行级锁,SQL为:SELECT * FROM table where id = 1 for update;.for ...
最新文章
- 括号匹配算法 java_使用栈实现括号匹配算法-java
- 说明使用assert和防错代码的区别
- Java内存模型与指令重排
- VTK:图片之DrawOnAnImage
- css设置 ul的内外边距,9月3日学习CSS选择器,背景设置,及内外边距知识总结
- Linux命令之diff
- 计算机应用第7章在线测试,《计算机应用基础》第07章在线测试
- centos7 挂载镜像盘 LVM处理的不合理
- private访问权限java_Java 访问权限控制:public、private、protected
- hbase数据库使用
- 云存储收银系统_爱宝云收银系统
- 房产交易进化:探索“去中介”无人区
- 川希:哪些网站百度收录快排名好,高权重网站必收藏!
- 多少秒算长镜头_什么是长镜头画面(电影里的长镜头有哪些分类)
- Python Numpy的数组array和矩阵matrix
- 90后HTTP 的爱情故事
- 为什么阿里会选择 Flink 作为新一代流式计算引擎?
- Bootstrap3动态添加的元素tooltip不生效
- 火狐中无法打开google的搜索结果的解决方式
- ExpandableListView讲解
热门文章
- Spring Cloud 2020 年路线图:二季度Spring Boot 2.3、四季度Spring Cloud Ilford
- 白话:服务降级与熔断的区别
- c++智能指针 示例讲解
- pytorch判断NaN
- torch 多进程卡死
- 无法解析的外部符号 class boost::system::error_category const __cdecl boost::system::system_category(void)
- test argument is not supported anymore. Use chainer.using_config
- python 文件名相关
- _matroska_decode_buffer in
- This version of MySQL doesn't yet support 'LIMIT IN/ALL/ANY/SOME subquery'