【问题标题】:Count clicks in date range with SQL (PHP)使用 SQL (PHP) 计算日期范围内的点击次数
【发布时间】:2013-05-14 09:45:18
【问题描述】:

我想根据某个日期范围内的每日水平计算所有点击次数。

假设我想计算“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 的日子。

希望有人能帮忙

【问题讨论】:

  • 你的意思是你只得到日期列中的日期?或者你没有得到 2012-05-04 的 0 点击,这真的很奇怪?
  • 您的数据库如何返回它甚至没有的数据。如果有些日子没有显示,这意味着它们没有数据,您可以轻松地将其添加到您的 PHP 代码中以显示那些日期为 0 计数

标签: php sql date-range


【解决方案1】:

由于您只在有点击的日子里获得结果,所以在没有点击的日子里您不会得到任何结果。你需要

A) 生成日期列表并返回每天的点击次数。 类似于SQL Server: How to select all days in a date range even if no data exists for some days

B) 不要将结果行用于输出,而是在 PHP 中枚举每一天,如果在 SQL 结果集中没有找到这一天,则在输出中插入一个 0 条目。您可以使用 date_add 一次将一天添加到期间开始 DateTime 并将其格式化为带有 date 的字符串,以检查它与结果的日期。

【讨论】:

    【解决方案2】:

    尝试使用BETWEEN 子句...

    SELECT * FROM table_name WHERE column_name BETWEEN start_date AND end_date
    

    【讨论】:

    • 这很好,但我认为他希望得到所有日期的结果,而不仅仅是他在 db 中的日期。顺便说一句,我没有给你-1。
    • 不起作用。它应该返回日期范围内的所有日期并计算当天的点击次数。该示例仅返回有任何点击的天数:-)
    • 不,但您的示例仍然无法正常工作 - 所以这是同一个“问题”:-)
    • 你们两个不明白,他希望查询返回范围内的所有日期,而不仅仅是他在数据库中的日期。
    • @Mr.Alien 我同意,我在其他答案中也发表了评论。
    【解决方案3】:

    尝试这样,因为现在您正在获取日期范围内的值。

    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;
    

    此外,仅当您的表在特定日期有任何记录时,此查询才会返回计数。

    【讨论】:

    • 不起作用。它应该返回日期范围内的所有日期并计算当天的点击次数。该示例仅返回有任何点击的天数:-)
    • @SimonThomsen 不仅如此。无论您编写什么查询,只有当表有数据时才会返回。在这种情况下,您需要单独生成所有日期,然后您应该获取日期的计数。
    【解决方案4】:
    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
    

    【讨论】:

    • 不起作用。它应该返回日期范围内的所有日期并计算当天的点击次数。该示例仅返回有任何点击的天数:-)
    • 不,它会返回数据库中的日期!您不能期望查询是智能的并为您安排其余日期。您必须首先找到所有日期(使用 mysql 中的日期函数),然后检查每个日期的计数。或者正如有人在 php set 0 中建议的那样,对于 db 中不存在的日期。
    【解决方案5】:

    试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多