繁体   English   中英

php mysql连接多个表

[英]php mysql join multiple table

我有两张桌子

用户

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时,只有userID才能获得10分。 对不起,我错了。

你可以做这样的事情:

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

我认为你需要两个单独的选择来获得每种注册类型的点数,并结合一个union语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM