【问题标题】:PHP mysql queries to fill a bar chart The Last 7 daysPHP mysql 查询填充条形图 The Last 7 days
【发布时间】:2013-04-07 01:51:51
【问题描述】:

我有一个要填充的条形图,它需要 7 和 1 为一周中的每一天,周一 - 周日。

星期一是工作周的开始,星期日是一周的最后一天。

数据库中的数据如下所示。

user1|2013-04-13 16:53:55|1
user1|2013-03-13 16:53:55|1
user1|2013-03-13 15:53:55|1
user1|2013-02-13 09:53:55|1
user1|2013-04-13 07:53:55|1
user2|2013-03-13 15:53:55|1

行数是每个用户的总和

这是一种找出星期几的方法。

    //find day of week 
    $dayofweek = date('l', strtotime(date("Y-m-d H:i:s")));

    $dates = array(); 
    if ($dayofweek == "Monday") {
      $dates['monday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Monday last week' ));
      $dates['monday']['evening']= date( 'Y-m-d 23:59:59', strtotime( 'Monday last week' ));
      $dates['tuesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Tuesday this week' ));
      $dates['tuesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Tuesday this week' ));
      $dates['wednesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Wednesday this week' ));
      $dates['wednesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Wednesday this week' ));
      $dates['thursday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Thursday this week' ));
      $dates['thursday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Thursday this week' ));
      $dates['friday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Friday this week' ));
      $dates['friday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Friday this week' ));
      $dates['saturday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Saturday this week' ));
      $dates['saturday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Saturday this week' ));
      $dates['sunday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Sunday this week' ));
      $dates['sunday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Sunday this week' ));     
    }
    elseif ($dayofweek == "Tuesday") {
      $dates['monday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Monday last week' ));
      $dates['monday']['evening']= date( 'Y-m-d 23:59:59', strtotime( 'Monday last week' ));
      $dates['tuesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Tuesday last week' ));
      $dates['tuesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Tuesday last week' ));
      $dates['wednesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Wednesday this week' ));
      $dates['wednesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Wednesday this week' ));
      $dates['thursday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Thursday this week' ));
      $dates['thursday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Thursday this week' ));
      $dates['friday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Friday this week' ));
      $dates['friday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Friday this week' ));
      $dates['saturday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Saturday this week' ));
      $dates['saturday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Saturday this week' ));
      $dates['sunday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Sunday this week' ));
      $dates['sunday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Sunday this week' ));      
    } 
    elseif ($dayofweek == "Wednesday") {
      $dates['monday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Monday last week' ));
      $dates['monday']['evening']= date( 'Y-m-d 23:59:59', strtotime( 'Monday last week' ));
      $dates['tuesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Tuesday last week' ));
      $dates['tuesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Tuesday last week' ));
      $dates['wednesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Wednesday last week' ));
      $dates['wednesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Wednesday last week' ));
      $dates['thursday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Thursday this week' ));
      $dates['thursday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Thursday this week' ));
      $dates['friday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Friday this week' ));
      $dates['friday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Friday this week' )); 
      $dates['saturday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Saturday this week' ));
      $dates['saturday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Saturday this week' ));
      $dates['sunday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Sunday this week' ));
      $dates['sunday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Sunday this week' ));     
    }
    elseif ($dayofweek == "Thursday") {
      $dates['monday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Monday last week' ));
      $dates['monday']['evening']= date( 'Y-m-d 23:59:59', strtotime( 'Monday last week' ));
      $dates['tuesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Tuesday last week' ));
      $dates['tuesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Tuesday last week' ));
      $dates['wednesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Wednesday last week' ));
      $dates['wednesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Wednesday last week' ));
      $dates['thursday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Thursday last week' ));
      $dates['thursday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Thursday last week' ));
      $dates['friday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Friday this week' ));
      $dates['friday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Friday this week' ));
      $dates['saturday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Saturday this week' ));
      $dates['saturday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Saturday this week' ));
      $dates['sunday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Sunday this week' ));
      $dates['sunday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Sunday this week' ));      
    } 
    elseif ($dayofweek == "Friday") {
      $dates['monday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Monday last week' ));
      $dates['monday']['evening']= date( 'Y-m-d 23:59:59', strtotime( 'Monday last week' ));
      $dates['tuesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Tuesday last week' ));
      $dates['tuesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Tuesday last week' ));
      $dates['wednesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Wednesday last week' ));
      $dates['wednesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Wednesday last week' ));
      $dates['thursday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Thursday last week' ));
      $dates['thursday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Thursday last week' ));
      $dates['friday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Friday last week' ));
      $dates['friday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Friday last week' ));
      $dates['saturday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Saturday this week' ));
      $dates['saturday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Saturday this week' ));
      $dates['sunday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Sunday this week' ));
      $dates['sunday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Sunday this week' ));      
    } 
    elseif ($dayofweek == "Saturday") {
      $dates['monday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Monday last week' ));
      $dates['monday']['evening']= date( 'Y-m-d 23:59:59', strtotime( 'Monday last week' ));
      $dates['tuesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Tuesday last week' ));
      $dates['tuesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Tuesday last week' ));
      $dates['wednesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Wednesday last week' ));
      $dates['wednesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Wednesday last week' ));
      $dates['thursday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Thursday last week' ));
      $dates['thursday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Thursday last week' ));
      $dates['friday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Friday last week' ));
      $dates['friday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Friday last week' ));
      $dates['saturday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Saturday last week' ));
      $dates['saturday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Saturday last week' ));
      $dates['sunday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Sunday this week' ));
      $dates['sunday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Sunday this week' ));      
    }
    elseif ($dayofweek == "Sunday") {
      $dates['monday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Monday last week' ));
      $dates['monday']['evening']= date( 'Y-m-d 23:59:59', strtotime( 'Monday last week' ));
      $dates['tuesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Tuesday last week' ));
      $dates['tuesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Tuesday last week' ));
      $dates['wednesday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Wednesday last week' ));
      $dates['wednesday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Wednesday last week' ));
      $dates['thursday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Thursday last week' ));
      $dates['thursday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Thursday last week' ));
      $dates['friday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Friday last week' ));
      $dates['friday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Friday last week' ));
      $dates['saturday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Saturday last week' ));
      $dates['saturday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Saturday last week' ));
      $dates['sunday']['morning'] = date( 'Y-m-d 00:00:01', strtotime( 'Sunday last week' ));
      $dates['sunday']['evening'] = date( 'Y-m-d 23:59:59', strtotime( 'Sunday last week' ));      
   }

我应该为一周中的每一天创建七个查询 1 吗?

SELECT myDateTime FROM `mylog` WHERE myDateTime >= $dates['monday']['morning'] AND myDateTime <= $dates['monday']['evening']

或者有没有更简单更有效的方法?

谢谢。

=========================编辑 1===================== =======

这是我目前所拥有的。

SELECT date( myDateTime ) , sum( myValue )
FROM mylog
GROUP BY date( myDateTime )

如何像星期一一样指定我想要的日期?

有没有办法把它变成 1 个查询而不是 7 个?

谢谢。

【问题讨论】:

  • 哇,看着很痛苦
  • 是的..我知道,但它有效,但我想知道更好的方法,所以与其只是询问而不提供任何代码,至少我确实先尝试了。
  • 对此表示赞赏,但我不确定基于该代码所需的输出是什么,您不能在查询中按天分组吗?
  • 我真的不习惯按语句分组...我想它可以工作,但我每天仍然需要 7 个查询 1 吗?或者我们可以使用别名来只运行 1 个查询吗?
  • 应该可以通过单个查询来实现

标签: php mysql sql


【解决方案1】:

我想你想要的可能是这个。虽然我可能错了

SELECT user, DAYOFWEEK(myDateTime) as day_of_week, SUM(myValue) as total
FROM mylog
WHERE myDateTime >= DATE_FORMAT(NOW() - INTERVAL 1 WEEK, "%Y-%m-%d")
GROUP BY user, DAYOFWEEK(myDateTime)

希望这是不言自明的吗? WHERE 子句为您提供上周的所有记录,GROUP BY 将首先按用户分组,然后是星期几(1 = 星期日)。这些东西的手册是http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_dayofweek。所以你应该得到类似的东西

user  |  day_of_week  |  total
------+---------------+-------
user1 | 1             | 23
user1 | 2             | 14
...
user1 | 7             | 65
user2 | 1             | 12
user2 | 2             | 78

等等。这似乎是您一开始就在问的问题?

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2021-03-15
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2016-01-15
    • 2015-07-13
    相关资源
    最近更新 更多