我将仅解释与问题相关的内容,并省略任何其他不相关的细节。
现在的情况:
我有两张桌子,硬币和用户。
coin
有三个字段id, uid, fid.
用户(已经在系统中注册并且可以邀请朋友)和他们的朋友(已经接受邀请并且成为会员)之间的硬币表。-该表仅存储被邀请后的成功注册-
id
是唯一索引。
uid
是存储用户ID。
fid
是存储好友id(接受邀请并成为系统成员的好友)。
users
具有有关用户的常用信息,例如id, fname, lname, email
...etc 和date_create
目标: 找出发出最多邀请的获奖者。换句话说。查找邀请次数最多的顶级用户及其被邀请的朋友必须在 2012-08-31 之前注册。日期存储在表“用户”列 date_create 中。日期格式为 yyyy-mm-dd
例子-
Table coin
id uid fid
1 333 777
2 444 888
3 555 999
4 333 123
5 444 456
6 333 789
Table users
id date_create
333 2012-07-15
444 2012-07-20
555 2012-07-25
777 2012-07-25
888 2012-07-25
999 2012-10-02 <-- I don't need this to be counted
123 2012-07-25
456 2012-07-25
789 2012-07-25
表示用户 333 的邀请数量最多(邀请了 3 个用户)-> 777,123 和 789,用户 444 邀请了 2 个用户,用户 555 只邀请了 1 个用户,但对于 555,由于他的朋友(999)在 2012 年之后注册,因此不会被计算在内-08-31
我想要的是用户
333 has made 3 invitations before 2012-08-31.
444 has made 2 invitations before 2012-08-31.
到目前为止我所做的是:[完全不确定]
SELECT
c.uid,
u.fname,
u.lname,
u.phone,
u.email,
u.country,
COUNT(c.fid) AS NoOfFriends
FROM coin AS c
JOIN users AS u
ON c.uid = u.id
GROUP BY c.uid
ORDER BY NoOfFriends desc
无论他/她的朋友何时注册,此查询都会(据我所知)带来最多邀请的用户。
所以我的问题是: Q1)如何将日期条件应用到我的查询中?
我想要拥有最多好友邀请的用户。他/她邀请的朋友必须在2012-08-31之前接受邀请并注册。在该日期之后任何其他接受的邀请都不应计算在内。
请为我提供代码示例。