現在の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が祖先自身であるためです。
私の仮定と方法は正しいですか、それともこれを行うためのより簡単な方法がありますか?