【问题标题】:php mysql join multiple tablephp mysql加入多个表
【发布时间】:2023-03-14 15:44:01
【问题描述】:

我有两张桌子

用户

userID username     email
  1       abc    abc@abc.com
  2       def    def@def.com
  3       ghi    ghi@ghi.com

推荐

 refID userID      invEmail
   1      1      abc@def.com
   2      1      omg@mog.com
   3      1      def@def.com

所以我打算给一个invited user 5 point 同时给一个inviter 10 point,所以基本上userID 1 获得了 30 而userID 2 获得了 5。我可以在 PHP 中做的一点但是我面临的困难是当一个要识别的invEmail。如果可行的话,我不介意分成多个查询。

如何在 sql 中显示?

我尝试了类似的东西

SELECT *, count(r.userID) FROM user u, referral r WHERE u.userID = r.userID OR u.email = r.invEmail GROUP BY r.userID

它返回了错误的值。

我希望它返回什么,邀请者和被邀请者的数量(根据邀请者邀请匹配的注册电子邮件)

我该怎么做?

谢谢。

编辑:我忘了添加一些问题,如果我希望邀请人只有在被邀请人注册的情况下才能获得 10 分怎么办?我的意思是,只有当 u.email 中存在 invEmail 时,才会收到 10 分的 userID。对不起我的错误。

【问题讨论】:

  • 您能否编辑您的答案以包括 A)它返回的内容和 B)您希望它返回的内容?
  • ok 编辑添加应该返回的内容

标签: php mysql


【解决方案1】:

你也许可以这样做:

select points.userId, points.username, points.email, sum(points.points)
FROM
(select u.*, count(*)*10 as points
  from user u
    join referral on u.userID = r.userID
    join user verify_user on r.invEmail = verify_user.email
  group by u.userID, u.username, u.email
UNION
select u.*, count(*)*5 as points
  from user u
    join referral on u.email = r.invEmail and u.userID != r.userID
  group by u.userID, u.username, u.email
) as points
group by points.userId, points.username, points.email

我认为您需要两个单独的选择来获得每种注册类型的积分,并结合一个联合声明。

【讨论】:

  • 哇,我当然不在乎,我正在尝试这个解决方案,很快就会通知你。感谢您帮助我。
  • 我可以知道这是什么意思吗? join referral on u.userID = r.refID and u.userID != r.userID 因为 refID 只是主键随着自动递增而增加
  • 查询中缺少sql FROM
  • 今天早上我需要更多的咖啡
  • 您好,我忘了补充一些问题,如果我希望邀请人只有在被邀请人注册的情况下才能获得 10 分怎么办?我的意思是,只有当 u.email 中存在 invEmail 时,才会收到 10 分的 userID。对不起我的错误。
猜你喜欢
  • 1970-01-01
  • 2011-11-20
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
相关资源
最近更新 更多