过去30天无法过滤推介

时间:2015-10-18 16:07:42

标签: php mysql sql

我有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

但它仍然提供推荐总数

怎么了?

1 个答案:

答案 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上的索引。