当前用户表:
Field Type
id int(11)
firstname varchar(64)
lastname varchar(64)
status varchar(5)
permission smallint(5)
当前的 USER_RELATIONS 表:(它有 2 个外键 - 祖先->USER.id - 后代->USER.id)
Field Type
relationId int(11)
ancestor int(11)
descendant int(11)
length int(11)
当前 TRANSACTIONS 表:(它有 1 个 FOREIGN KEY - chid->USER.id)
Field Type
id int(11)
chid int(11)
date date
amt varchar(16)
所有关系均已正确设置,并在用户加入并输入引用他的另一个用户的引用时创建,从而创建层次结构树。
以前我试图正确地进行此设置,并从“Puggan Se”那里得到了一些很大的帮助,他向我指出了 Closure Tables 的方向。
目前,我可以看到单个原始引用者(祖先)及其所有引用用户(后代)的整个树。我们还设置了一个自动调平系统,该系统将调平每个参考了预定义数量的后代的用户。
我们现在已经添加了一个商店,并希望给每个用户一些东西作为他们的参考,并邀请其他用户加入和购物。“小东西”基本上是销售额的百分比,基于它们的树结构。
解释:
1: A invited B, C & D -> B invited E,F -> C invited G -> D invited no-one
2: A moves to status=2(because he invited 3) -> B moves to status=1 (cause he invited 2)-> C & D remain on status=0 (because minimum required invites = 2)
3: Now when B, C & D purchases something from the shop, A should ge a little something back. Because A is status 2, he will get X % for all status=1 sales and Y % for all status=0 sales
4: In the event that B surpases A in status, A will NOT get a "little something" back.
5: status=0 levels do not get something back.
问题:我希望有人检查 MySQL 查询并告诉我是否正确执行。我想在后代状态<祖先状态的祖先树中获取所有后代的总交易和总支出。有人可以帮忙吗?目前我为每个关系运行它 4 次。长度/状态 = 因为有 4 个低于最高的状态级别,即 4。
查询:
select COUNT(*) as total, SUM(amt) as amount from transactions
left join card_holders_relations as t1 on transactions.chid = t1.descendant
left join card_holders as t2 on t2.id = t1.descendant
where t1.ancestor = '3'
AND t2.status = 0
AND t1.length = 4;
现在每次 t2.status 增加到不等于祖先状态并且 t1.length 减小到 1,因为 length = 0 是祖先本身。
我的假设和方法是否正确,或者有更简单的方法吗?