首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对多级营销进行mysql查询

对多级营销进行mysql查询
EN

Stack Overflow用户
提问于 2015-07-10 02:28:36
回答 1查看 823关注 0票数 0

我需要创建一个选择,在一个多层次的营销系统中列出HTML中的一棵树。我的关系表有:

Members_relations:

代码语言:javascript
复制
memberID parentID  
1        2  
1        3  
1        4  
5        NULL  
6        NULL  
7        8  
4        7  

Members_sales:

代码语言:javascript
复制
Id   Sale  
1    500   
2    300  
3    400  
4    150  
5    200  
6    0  
7    0  
8    0  

例如,如果我需要检索高于memberID 1的成员数量,并且需要在其他选择中检索成员1以上的每个成员,我需要进行另一个选择,以获取成员1以上的每个成员的销售额,例如可以为成员1支付佣金。

如何进行此查询?记住这是一个多层次的营销系统,

EN

回答 1

Stack Overflow用户

发布于 2015-07-10 13:04:45

这是一个样品解决方案。我已经改变了你的树结构,让你的回答更有意义。可以自由地将代码与精确的需求相匹配( sechema,commisions,.)在你的环境里。

代码语言:javascript
复制
Members_relations
parentID memberID    <--- OP, be carefull here
1        2  
1        3  
1        4  
7        8  
4        7
10       100 

Members_sales:
Id   Sale  
1    500   
2    300  
3    400  
4    150  
5    200  
6    0  
7    0  
8    0  
10   999
100  888

为了找出答案,孩子们发现:

代码语言:javascript
复制
DELIMITER $$
DROP PROCEDURE IF EXISTS letsgo;
CREATE PROCEDURE letsgo ( IN id int ) BEGIN
 DECLARE nR INT;
 DROP TEMPORARY TABLE IF EXISTS children;
 CREATE TEMPORARY TABLE children AS (SELECT id as Id);
 DROP TEMPORARY TABLE IF EXISTS children_prev;
 CREATE TEMPORARY TABLE children_prev AS (SELECT id as Id );
 SET nR = ( SELECT count(*) FROM children ); 
 WHILE ( nR > 0 ) DO
   DROP TEMPORARY TABLE IF EXISTS children_aux;
   CREATE TEMPORARY TABLE children_aux AS (
     SELECT memberID as id 
       FROM Members_relations R  
       INNER JOIN  children_prev C on C.id = R.parentID
   );
   SET nR = ( SELECT count(*) FROM children_aux );  
   INSERT INTO children 
      SELECT * FROM children_aux;
   TRUNCATE TABLE children_prev;
   INSERT INTO children_prev
      SELECT * FROM children_aux;   
 END WHILE;
 SELECT SUM( Sale ) 
   FROM Members_sales S 
  INNER JOIN children C on C.id = S.Id;

END;
$$
DELIMITER ;

测试:

代码语言:javascript
复制
mysql> call letsgo(1);
+-------------+
| SUM( Sale ) |
+-------------+
|        1350 |
+-------------+
1 row in set (0.16 sec)

mysql> call letsgo(100);
+-------------+
| SUM( Sale ) |
+-------------+
|         888 |
+-------------+
1 row in set (0.06 sec)

注意:我对脏解决方案表示歉意,但这是MySQL:没有CTE,没有对函数递归的选择,没有DO-WHILE,.

注意:要记住,在许多国家,多层次营销计划是不允许的,也是法律禁止的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31331501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档