使用SQL(PHP)统计日期范围内的点击次数
我想根据日期范围内的每日级别计算所有点击次数使用SQL(PHP)统计日期范围内的点击次数,php,sql,date-range,Php,Sql,Date Range,我想根据日期范围内的每日级别计算所有点击次数 SELECT count(date) as clicks, date FROM views WHERE uid = $id AND date BETWEEN $from_dt AND $to_dt group by date ORDER BY date DESC; 假设我想计算“2013-05-01”-“2013-05-30”之间的所有点击次数,并希望以下结果如下: date clicks 2013-05-01
SELECT count(date) as clicks, date FROM views
WHERE uid = $id AND date BETWEEN $from_dt AND $to_dt
group by date ORDER BY date DESC;
假设我想计算“2013-05-01”-“2013-05-30”之间的所有点击次数,并希望以下结果如下:
date clicks
2013-05-01 50
2013-05-02 60
2013-05-03 65
2013-05-04 0
etc...
目前,我有以下SQL调用
SELECT count(date) as clicks, date FROM views WHERE uid = $id group by date ORDER BY date DESC
这很好,唯一的问题是,我没有得到日期范围内的所有日期,但只有有点击的日期。我应该能够得到所有的日子,也就是有0次点击的日子
希望有人能帮忙试着用
中间的子句
SELECT * FROM table_name WHERE column_name BETWEEN start_date AND end_date
尝试使用BETWEEN
子句
SELECT * FROM table_name WHERE column_name BETWEEN start_date AND end_date
尝试这样做,因为现在您正在获取日期范围内的值
SELECT count(date) as clicks, date FROM views
WHERE uid = $id AND date BETWEEN $from_dt AND $to_dt
group by date ORDER BY date DESC;
此外,仅当您的表在特定日期有任何记录时,此查询才会返回计数。尝试这样做,因为现在您正在获取日期范围内的值
SELECT count(date) as clicks, date FROM views
WHERE uid = $id AND date BETWEEN $from_dt AND $to_dt
group by date ORDER BY date DESC;
SELECT count(date) as clicks, date
FROM views
WHERE uid = $id
AND date between 'date1' and 'date2'
group by DAY(date)
ORDER BY date DESC
此外,仅当您的表在特定日期有任何记录时,此查询才会返回计数。因为您只从有单击的天数中获取结果,所以在没有单击的天数中不会获得任何结果。你要么
SELECT count(date) as clicks, date
FROM views
WHERE uid = $id
AND date between 'date1' and 'date2'
group by DAY(date)
ORDER BY date DESC
A) 生成日期列表并返回每天的点击次数。
近似
B) 如果在SQL结果集中找不到日期,则在PHP中枚举每天,并在输出中插入0条目,而不是使用结果行作为输出。您可以使用将一天一次添加到时段开始时间DateTime
,并将其格式化为字符串,以对照结果日期进行检查。由于您仅从有单击的日期获得结果,因此在没有单击的日期内,您将无法获得任何结果。你要么
A) 生成日期列表并返回每天的点击次数。
近似
B) 如果在SQL结果集中找不到日期,则在PHP中枚举每天,并在输出中插入0条目,而不是使用结果行作为输出。您可以使用将一天一次添加到时段开始时间DateTime
,并将其格式化为字符串,以对照结果日期进行检查。尝试以下操作:
select sum(clicks) as total_clicks,date from views where uid='$id' AND (date BETWEEN $from_dt AND $to_dt) group by date order by date desc
试试这个:
select sum(clicks) as total_clicks,date from views where uid='$id' AND (date BETWEEN $from_dt AND $to_dt) group by date order by date desc
你的意思是你只得到日期列中的日期?或者你没有通过0点击得到2012-05-04,这真的很奇怪?你的数据库怎么能返回你甚至没有的数据呢。如果有几天没有显示,这意味着没有数据,您可以很容易地将其添加到PHP代码中,以显示这些日期,其中包含0个计数。您的意思是只显示日期列中的日期?或者你没有通过0点击得到2012-05-04,这真的很奇怪?你的数据库怎么能返回你甚至没有的数据呢。如果有几天没有显示,这意味着没有数据,您可以很容易地将其添加到PHP代码中,以显示这些日期,其中包含0个计数。这可能是重复的,但我认为他希望所有日期的结果,而不仅仅是他在db中拥有的日期。而且我没有给你-1个btw。不起作用。它应该返回日期范围内的所有日期,并计算当天的点击次数。这个例子只返回有点击的天数:-)不,但你的例子仍然不起作用-所以这是同一个“问题”:-)你们两个不理解对方,他希望查询返回范围内的所有日期,而不仅仅是他在数据库中的日期。@Mr.Alien我同意,我在其他答案中也评论了这一点。这很好,虽然我认为他想要的是所有日期的结果,而不仅仅是他在db中的那些日期。而且我没有给你-1个btw。不起作用。它应该返回日期范围内的所有日期,并计算当天的点击次数。这个例子只返回有点击的天数:-)不,但你的例子仍然不起作用-所以这是同一个“问题”:-)你们两个不理解对方,他希望查询返回范围内的所有日期,而不仅仅是他在数据库中的日期。@Mr.Alien我同意,我在其他答案中也评论了这一点。不起作用。它应该返回日期范围内的所有日期,并计算当天的点击次数。该示例仅返回有任何单击的天数:-)不,它返回以DB为单位的日期!你不能指望查询是智能的,并为你做其余的日期。您必须首先查找所有日期(使用mysql中的日期函数),然后检查每个日期的计数。或者像有人在php中建议的那样,为数据库中不存在的日期设置0。不起作用。它应该返回日期范围内的所有日期,并计算当天的点击次数。该示例仅返回有任何单击的天数:-)不,它返回以DB为单位的日期!你不能指望查询是智能的,并为你做其余的日期。您必须首先查找所有日期(使用mysql中的日期函数),然后检查每个日期的计数。或者像有人在php中建议的那样,为数据库中不存在的日期设置0。不起作用。它应该返回日期范围内的所有日期,并计算当天的点击次数。该示例仅返回有任何单击的天数:-)@simontomsen不仅如此。无论您编写什么查询,只有当表中有数据时,它才会返回。在这种情况下,您需要单独生成所有日期,然后获取日期的计数。不起作用。它应该返回日期范围内的所有日期,并计算当天的点击次数。该示例仅返回有任何单击的天数:-)@simontomsen不仅如此。无论您编写什么查询,只有当表中有数据时,它才会返回。在这种情况下,您需要单独生成所有日期,然后您应该获得该日期的计数。