我有2张桌子
表用户
USER_ID------USERNAME------------REGISTERTIME
1-----------------admin----------1432985224
2-----------------test ----------1433985224
3-----------------test2----------1332985224
表REFERRALS
REFERRER_ID----------REFERRAL_ID
1-----------------------------2
1-----------------------------3
如何用mysql显示:
user admin have 2 referrals in last 30 days
user test have 0 referrals in last 30 days
user test2 have 0 referrals in last 30 days
尝试:
SELECT
users.username,
COUNT(referrals.user_id) AS referrals
FROM
users
INNER JOIN
referrals ON
referrals.referral_id = users.user_id
WHERE users.registertime > DATE_SUB(CURDATE(),INTERVAL 30 DAY)
GROUP BY
users.user_id
但它仍然提供推荐总数
怎么了?
答案 0 :(得分:1)
您的注册时间采用unix时间戳的格式。因此,您可以使用适合该类型的比较:
SELECT u.username,
COUNT(r.user_id) AS referrals
FROM users u LEFT JOIN
referrals r ON
r.referral_id = u.user_id
WHERE u.registertime > UNIX_TIMESTAMP() - 30*24*60*60
GROUP BY u.user_id;
实际上,这需要考虑时间,而原始查询却没有。所以,这有点好一点:
WHERE u.registertime > floor((UNIX_TIMESTAMP() - 30*24*60*60) / 30*24*60*60) * 30*24*60*60
注意:所有操作都在“常量”侧而不是在列上。这允许查询使用registertime
上的索引。