我有一个表(用户),其中包含以下信息:
id | user_id | name | country | referral_id
----------------------------------------------------
1 | 10 | Jhon | India | 0
2 | 11 | Krish | America | 0
3 | 12 | Boss | Canada | 0
4 | 13 | Jack | India | 11
5 | 14 | Ronald | Japan | 10
6 | 15 | Jey | Germany | 10
还有其他表格(total_earning),其中包含以下信息:
id | user_id | date | earning
--------------------------------------------
1 | 10 | 2015-10-25 | 4.4$
2 | 14 | 2015-10-25 | 2.2$
3 | 15 | 2015-10-27 | 3.0$
4 | 15 | 2015-10-25 | 1.5$
我想向用户提供推荐付款(该用户收入的10%)。
例如。 User.10 有2个推介( User.14 和 User.15 ),所以我想从user.14& user.15赚钱。
如何从这2个表创建一个MySQL View表?
答案 0 :(得分:2)
您需要一个由两部分组成的查询。第一个查询是基于每个用户的任何可能的收入。这就是" JustMe"别名......每个人直接赚取了什么。
由此,进行LEFT-JOIN(并非所有用户都有来自其他用户的推荐)到第二个查询"推荐"别名。这会将收入加入到users表中,并从USERS表中获取引用ID作为分组。您可以从用户X推荐10个人,因此您希望将所有收入汇总为用户X的一个。
从那里开始,然后加入到用户表格中,将主要人物与他们的收入拉为一列,以显示他们将获得的总推荐奖金。
select
U.Name,
U.Country,
JustMe.JustMyEarnings,
coalesce( Referrals.ReferralEarnings * .1, 0 ) as ReferralBonus
from
( select
te.user_id,
sum( te.earning ) justMyEarnings
from
total_earning te
group by
te.user_id ) JustMe
LEFT JOIN
( select
U2.referral_id,
sum( te2.earning ) as ReferralEarnings
from
total_earnings te2
join users U2
on te2.user_id = U2.user_id
AND U2.referral_id > 0
group by
U2.referral_id ) Referrals
on JustMe.user_id = Referrals.referral_id
JOIN Users U
on JustMe.user_id = U.user_id
AND,如果你想将它作为一个视图,只需
CREATE VIEW UserReferralView as
(entire select from above...)
但是,如果您想要单个用户的结果,那么我会调整,因为您不希望内部查询在每次需要一个人的总计时查询整个表。我会将内部查询调整为类似
的内容 ( select
te.user_id,
sum( te.earning ) justMyEarnings
from
total_earning te
where
te.user_id = THE_ONE_USERID_YOU_WANT
group by
te.user_id ) JustMe
LEFT JOIN
( select
U2.referral_id,
sum( te2.earning ) as ReferralEarnings
from
total_earnings te2
join users U2
on te2.user_id = U2.user_id
AND U2.referral_id > 0
AND te2.referral_id = THE_ONE_USERID_YOU_WANT
group by
U2.referral_id ) Referrals