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)