MySQL是否仅在本月内?
我有下面的MySQL查询,我正在尝试对其进行调整,使其只获取当月(今年)内的结果,我猜您可能需要有关我的MySQL结构的更多信息,所以现在开始-我有一个由PHP的MySQL是否仅在本月内?,mysql,aggregate-functions,Mysql,Aggregate Functions,我有下面的MySQL查询,我正在尝试对其进行调整,使其只获取当月(今年)内的结果,我猜您可能需要有关我的MySQL结构的更多信息,所以现在开始-我有一个由PHP的time()生成的UNIX时间戳,存储在time列中(在转诊表下),因此使用下面的设置将是t2.time 所以我的问题是我不确定如何继续,我猜这就像在WHERE子句的末尾添加以下内容一样?=>和t2。时间在当月内(大写只是为了将问题与查询的其他部分区分开来),但我不确定如何检查它是否在当月内 MySQL查询: SELECT t1.use
time()
生成的UNIX时间戳,存储在time
列中(在转诊
表下),因此使用下面的设置将是t2.time
所以我的问题是我不确定如何继续,我猜这就像在WHERE
子句的末尾添加以下内容一样?=>和t2。时间在当月内(大写只是为了将问题与查询的其他部分区分开来),但我不确定如何检查它是否在当月内
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
感谢所有帮助!:B这可能比您预期的要简单得多
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 != ''
AND t2.time >= DATE_SUB( CURRENT_DATE, INTERVAL 1 DAY )
GROUP BY t1.username,
t1.website
ORDER BY in_count DESC
LIMIT 0, 10
在MySql中检查此函数
您可以添加如下条件:MONTH(FROM_UNIXTIME(t2.time))=MONTH(NOW())
从fireeyedboy获得评论帮助后进行编辑您需要使用和来限制结果。将查询的WHERE
部分更改如下:
WHERE t1.website != ''
AND YEAR(time) = YEAR(NOW())
AND MONTH(time) = MONTH(NOW())
你可以用like
但是我认为数据类型integer
不太适合这个要求
我认为使用datetime
会更合适,在这个列上建立一个索引,这也会使过滤更容易,比如
t2.`time`>='2011-01-01' and t2.`time`<'2011-02-01'
其中t2.time>=提取(从当前日期算起的年/月)
和t2.时间<提取(从当前日期算起的年/月+间隔1个月)
假设t2.time是datetime类型。如果它是一个整数unix时间戳,您可以使用unix_timestamp()函数转换我们创建的上下日期时间边界。要获得更好的性能(->使用索引),请在日期列上创建一个索引,并在where子句中使用“between”
select ... from my_table where my:date_field between concat(YEAR(CURRENT_DATE()),'-',MONTH(CURRENT_DATE()),'-01')
and adddate(concat(YEAR(CURRENT_DATE()),'-',MONTH(CURRENT_DATE()),'-01'), interval 1 month);
MONTH函数不要求参数/参数是MySQL日期(而不是UNIX时间戳)吗?(除非我误解了/误读了)@newtopHP-是的,你是对的。我假设t2.time是MySQL中的一个日期时间字段,否则无法仅从时间值确定月份。使用MONTH(from_UNIXTIME(你的_时间戳))
…就像ajreal在回答中提到的那样:哈哈。我应该先看看所有的答案;-)你知道数据类型时间
不存储年+月的详细信息吗?这意味着您的应用程序将在一年内遇到麻烦2012@ajreal我不确定我是否理解您的意思,但db中的类型是INT,它是由PHP的time()生成的UNIX时间戳。因此,数据类型不是time
?,我的缺点是,无论如何,避免使用保留关键字作为列或table@ajreal不,它不是数据类型时间,谢谢,不过我想我可以很容易地更改列名(以避免保留关键字问题)-因为应用程序仍在开发中(所以还不是公共/实时的)。:)结合使用from_unixtime()对我来说很有效,(获取上个月的数据)坏:将计算每行的月份()。最好尝试在列上进行范围比较。从t.stuff中选择*,其中日期介于日期格式(NOW(),%Y-%m-01)和最后一天(NOW())之间;
date_format(t2.`time`, '%Y-%m')=date_format(now(), '%Y-%m')
where t2.time >= extract(YEAR_MONTH from CURRENT_DATE)
and t2.time < extract(YEAR_MONTH from CURRENT_DATE + INTERVAL 1 MONTH)
select ... from my_table where my:date_field between concat(YEAR(CURRENT_DATE()),'-',MONTH(CURRENT_DATE()),'-01')
and adddate(concat(YEAR(CURRENT_DATE()),'-',MONTH(CURRENT_DATE()),'-01'), interval 1 month);