2012-01-29 71 views
0

我有两个表PHP MySQL的加入多个表

用户

userID username  email 
    1  abc [email protected] 
    2  def [email protected] 
    3  ghi [email protected] 

推荐

refID userID  invEmail 
    1  1  [email protected] 
    2  1  [email protected] 
    3  1  [email protected] 

所以我的计划是给一个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

你可以编辑你的答案,包括:A)它返回什么,B)你希望它返回什么? – Aaron 2012-01-29 16:41:50

+0

确定编辑添加什么应该返回 – cicakman 2012-01-29 16:45:14

+0

[你有什么试过?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2012-01-29 16:46:42

回答

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 

我想你需要两个独立的选择,以获得点,每个类型的注册,为联合声明相结合。

+0

哇,当然,我的联盟,我我正在尝试这个解决方案,并会很快让你知道。谢谢你的协助。 – cicakman 2012-01-29 16:52:03

+0

我可否知道这是什么意思? '加入引用u.userID = r.refID和u.userID!= r.userID'作为refID只是主键增加自动增量 – cicakman 2012-01-29 16:56:27

+1

啊,我想refID是用户。让我更新查询。 – 2012-01-29 16:57:19