Текущая таблица USER:
Field Type
id int(11)
firstname varchar(64)
lastname varchar(64)
status varchar(5)
permission smallint(5)
Текущая таблица USER_RELATIONS: (она имеет 2 КЛЮЧА FOREIGN - ancestor-> USER.id - Потомок-> USER.id)
Field Type
relationId int(11)
ancestor int(11)
descendant int(11)
length int(11)
Текущая таблица транзакций: (она имеет 1 FOREIGN KEY - chid-> USER.id)
Field Type
id int(11)
chid int(11)
date date
amt varchar(16)
Все отношения настроены правильно и создаются, когда пользователь присоединяется и вводит ссылку на другого пользователя, который ссылалсяего, таким образом создавая иерархическое дерево.
Ранее я пытался правильно настроить эту настройку и получил большую помощь от «Puggan Se», который указывал мне в направлении таблиц закрытия.
В настоящее время я вижу целое дерево для одного исходного реферера (предка) со всеми его рецензируемыми пользователями (потомком).Мы также настроили систему автоматического выравнивания, которая будет выравнивать каждого пользователя, который сослался на предварительно определенное количество потомков.
Мы добавили магазин и хотели бы дать каждому пользователю что-нибудь для своих ссылок.и приглашая других пользователей присоединиться и делать покупки.«Маленькое что-то» - это, в основном, процент от продажи, основанный на их древовидной структуре.
Объяснил:
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. </p>
Запрос:
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 - это сам предок.
Верны ли мои предположения и методы или есть более простой способ сделать это?