1

当前用户表:

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 是祖先本身。

我的假设和方法是否正确,或者有更简单的方法吗?

4

0 回答 0