枢轴查询以显示一年中每一天的数据

时间:2018-08-08 15:13:59

标签: php mysql

我有一个数据库表,如下所示:

id|start_date|end_date|sec
1|2018-08-01|2018-08-03|2500
2|2018-08-02|2018-08-13|100
3|2018-08-01|2018-08-05|500

所以我想明智地显示报告日期,以便用户可以知道特定日期有多少秒。

例如,我需要以下物品:

Date /Day            total
2018-08-01  (2500+500)=3000     //this date comes in 1&3 records
2018-08-02  (2500+100+500)=3100 //this date comes in all 1,2,&3 records
2018-08-03  (2500+100+500)=3100 //this date comes in all 1,2,&3 records
2018-08-04  (100+500)=600       //this date comes in 2&3 records
2018-08-05  (100+500)=600       //this date comes in 2&3 records
2018-08-06  (100)=100           //this date comes in 3  records

我正在尝试使用mysql和php,但我不知道该怎么办。

3 个答案:

答案 0 :(得分:1)

没有一种干净的方法可以实时生成当年的每一天的表,我从generate days from date range中提取了子表代码(以示感谢),因为它不使用任何循环等,并且执行时间短。话虽如此,您可以选择:

your_table

只需用您的表名替换URLSession.shared.dataTask(with: url) { (data, response, err) in guard let data = data else { return } if err == nil { do { let decoder = JSONDecoder() let devo = try decoder.decode(Devotion.self, from: data) DispatchQueue.main.async { self.articleBody = devo.body self.webView.loadHTMLString("<html><body>\(self.articleBody)</body></html>", baseURL: nil) } } catch let err { print("Err", err) } } }.resume()

答案 1 :(得分:0)

首先让我们假设您的记录已经被获取,并且可以在名为$ rows的关联数组中使用(在查询和mysqli_fetch_array类型调用之后):

$ra=array();
$nr=count($rows);    
for ($i=0; $i<$nr; $i++) {
   $start=$rows['start_date'];
   $end=$rows['end_date'];
   $sec=$rows['sec'];
   if (isset($ra[$start])) {
      $ra[$start]+=$sec;
   } else {
      $ra[$start]=$sec;
   }
   if (isset($ra[$end])) {
      $ra[$end]+=$sec;
   } else {
      $ra[$end]=$sec;
   }
}
print_r($ra);

答案 2 :(得分:0)

您必须遍历几天

select sum(sec) from table where ('2018-08-01') between start_date and end_date ;

用于生成日期With php, populate an array of days in current month