推荐的MySQL View表?

时间:2015-10-29 09:47:17

标签: php mysql

我有一个表(用户),其中包含以下信息:

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表?

1 个答案:

答案 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