如何将这两个查询组合成1并避免额外的代码

时间:2015-01-09 04:44:07

标签: php mysql

我在数据库中有2个表,表用户列出所有用户及其邀请者(推荐人),表捐款列出所有捐款

2个表格之间的唯一连接是捐赠中的 user_id ,表用户中的 id (主要AI)

我想要做的是获得表用户中所有用户的数量,这些用户有ref =' $ referrer'然后看看他们中有多少人捐赠了他们在捐款表中(每个用户可以捐赠多次,因此不应该将2次捐赠作为2个用户)

我尝试了什么:

首先我得到那个邀请者的每个参考

SELECT id FROM users WHERE ref='$referrer'

然后我把它放在while()循环中,并为每一个我检查他们是否有捐款

SELECT * FROM donations WHERE user_id='$id'

如果发现它们计为1 ++

问题

问题是,如果用户邀请了+500人,那么我使用PHP在循环中发送500个查询,这需要时间和资源

需要什么

我需要一个带有子查询的查询才能仅使用引荐来源ID(ref =' $ referer')并向我统计所有用户X的引荐(每个用户都有ref =& #39; 55'在桌面用户中例如)捐赠表中至少还有一笔捐款

类似的东西:

SELECT COUNT(*) FROM donations WHERE user_id = (SELECT id as user_id FROM users WHERE ref='$referer')

任何人都可以帮助我

2 个答案:

答案 0 :(得分:2)

SELECT COUNT(*) FROM donations d INNER JOIN users u ON d.user_id=u.id WHERE u.ref='$referrer' GROUP BY d.user_id

答案 1 :(得分:1)

试试这个:

SELECT users.id, COUNT(*) `donations_count`
FROM users
INNER JOIN donations ON user.id = donations.user_id
WHERE users.ref='$referrer'
GROUP BY users.user_id