如何将这 2 个查询合并为 1 个并避免额外的代码


How to combine these 2 queries into 1 and avoid extra code

我在数据库中有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='55'),这些用户在捐赠表中也至少有一次捐赠

像这样:

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

任何人都可以帮我吗

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

试试这个:

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