1

現在のUSERテーブル:

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つの外部キー-chid->USER.idがあります)

Field   Type
id  int(11)
chid    int(11)
date    date
amt     varchar(16)

すべてのリレーションは正しく設定されており、ユーザーが自分を参照している別のユーザーの参照に参加して入力すると作成され、階層ツリーが作成されます。

以前、私はこの設定を正しく取得しようとしていて、クロージャーテーブルの方向に私を向けた「PugganSe」からいくつかの大きな助けを得ました。

現在、単一の元のリファラー(祖先)とそのすべてのリファラーユーザー(子孫)のツリー全体を見ることができます。また、事前定義された数の子孫を参照した各ユーザーを平準化する自動平準化システムをセットアップしました。

これでショップが追加されました。各ユーザーに参考のために少しお返しをしたり、他のユーザーを招待して買い物をしたりしたいと思います。「ささいなこと」は、基本的に、ツリー構造に基づく売上の割合です。

説明:

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クエリを確認して、正しく実行しているかどうかを教えてもらいたいです。子孫ステータス<祖先ステータスである祖先ツリー内のすべての子孫によるトランザクションの合計と支出の合計額を取得したいと思います。誰か助けてもらえますか?現在、relations.length / status =ごとに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