我需要创建一个选择,在一个多层次的营销系统中列出HTML中的一棵树。我的关系表有:
Members_relations:
memberID parentID
1 2
1 3
1 4
5 NULL
6 NULL
7 8
4 7 Members_sales:
Id Sale
1 500
2 300
3 400
4 150
5 200
6 0
7 0
8 0 例如,如果我需要检索高于memberID 1的成员数量,并且需要在其他选择中检索成员1以上的每个成员,我需要进行另一个选择,以获取成员1以上的每个成员的销售额,例如可以为成员1支付佣金。
如何进行此查询?记住这是一个多层次的营销系统,
发布于 2015-07-10 13:04:45
这是一个样品解决方案。我已经改变了你的树结构,让你的回答更有意义。可以自由地将代码与精确的需求相匹配( sechema,commisions,.)在你的环境里。
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为了找出答案,孩子们发现:
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 ;测试:
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,.
注意:要记住,在许多国家,多层次营销计划是不允许的,也是法律禁止的。
https://stackoverflow.com/questions/31331501
复制相似问题