我有两张桌子
用户
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分。抱歉我的错误。
答案 0 :(得分:2)
你可能会做这样的事情:
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
我认为你需要两个单独的选择来获得每种注册类型的点数,并结合一个联合声明。