MySQL只在当月内?

new*_*php 11 mysql aggregate-functions

我有以下MySQL查询,我正在尝试调整它,因此它只获取当前月份(当前年份)内的结果,我猜你可能需要更多关于我的MySQL结构的信息所以这里它去了- 我有一个由PHP生成的UNIX时间戳time()存储在time列中(在referrals表下),所以使用下面的设置就可以了t2.time.

所以我的问题是我不确定如何继续,我猜这会像在WHERE条款的结尾添加以下内容?=> AND t2.time IS WITHIN THE CURRENT MONTH (上限只是为了区分问题与其他查询)但我不知道如何检查它是否在当前月份内.

MySQL查询:

SELECT t1.username,
       t1.website,
       SUM(IF(t2.type = 'in', 1, 0))  AS in_count,
       SUM(IF(t2.type = 'out', 1, 0)) AS out_count
FROM   users AS t1
       JOIN referrals AS t2
         ON t1.username = t2.author
WHERE  t1.website != ''
GROUP  BY t1.username,
          t1.website
ORDER  BY in_count DESC 
LIMIT  0, 10 
Run Code Online (Sandbox Code Playgroud)

感谢所有帮助!:乙

Ana*_*nax 66

您需要使用YEAR()函数限制结果.像这样更改查询的一部分:MONTH() WHERE

WHERE t1.website != ''
AND YEAR(time) = YEAR(NOW())
AND MONTH(time) = MONTH(NOW())
Run Code Online (Sandbox Code Playgroud)


ajr*_*eal 14

你可以使用from_unixtime喜欢

date_format(from_unixtime(t2.`time`), '%Y-%m')=date_format(now(), '%Y-%m')
Run Code Online (Sandbox Code Playgroud)

但我认为数据类型integer不太适合这个要求

我认为使用datetime将更合适,在此列上构建索引,这也使得过滤更容易,例如

t2.`time`>='2011-01-01' and t2.`time`<'2011-02-01'
Run Code Online (Sandbox Code Playgroud)

要么

date_format(t2.`time`, '%Y-%m')=date_format(now(), '%Y-%m')
Run Code Online (Sandbox Code Playgroud)