【问题标题】:Selecting Dates to sql and Sum选择日期到 sql 和 Sum
【发布时间】:2018-06-02 07:08:34
【问题描述】:

美好的一天。我正在为 MYSql 选择日期,我一一选择它。我想选择所有一周。而且我以前是单独选择的。

这是我的代码:

<?php
$chart6 = $controller->runQuery("SELECT SUM(amount) FROM tbl_paid WHERE pay_date >= :today - INTERVAL 6 DAY"); 
$chart6->execute(array(":today"=>$today));
$chartData6 = $chart6->fetchColumn();

$chart5 = $controller->runQuery("SELECT SUM(amount) FROM tbl_paid WHERE pay_date >= :today - INTERVAL 5 DAY"); 
$chart5->execute(array(":today"=>$today));
$chartData5 = $chart5->fetchColumn();

$chart4 = $controller->runQuery("SELECT SUM(amount) FROM tbl_paid WHERE pay_date >= :today - INTERVAL 4 DAY"); 
$chart4->execute(array(":today"=>$today));
$chartData4 = $chart4->fetchColumn();

$chart3 = $controller->runQuery("SELECT SUM(amount) FROM tbl_paid WHERE pay_date >= :today - INTERVAL 3 DAY"); 
$chart3->execute(array(":today"=>$today));
$chartData3 = $chart3->fetchColumn();

$chart2 = $controller->runQuery("SELECT SUM(amount) FROM tbl_paid WHERE pay_date >= :today - INTERVAL 2 DAY"); 
$chart2->execute(array(":today"=>$today));
$chartData2 = $chart2->fetchColumn();

$chart1 = $controller->runQuery("SELECT SUM(amount) FROM tbl_paid WHERE pay_date >= :today - INTERVAL 1 DAY"); 
$chart1->execute(array(":today"=>$today));
$chartData1 = $chart1->fetchColumn();

$chart0 = $controller->runQuery("SELECT SUM(amount) FROM tbl_paid WHERE pay_date >= :today"); 
$chart0->execute(array(":today"=>$today));
$chartData0 = $chart0->fetchColumn();
?>

是否有可以选择一周中全天总和的查询?还是我应该保留这段代码?

【问题讨论】:

  • 请在您的问题中添加一些示例和预期数据。
  • 他想选择当前日期前一周到他的数据库。 @cdaiga
  • 是的。并在每个选定的日期汇总所有(金额)。
  • 你用的是什么Mysql版本?
  • 服务器版本:10.1.31-MariaDB

标签: php mysql sql pdo


【解决方案1】:

试试 sql 使用group

SELECT Day(pay_date) pay_day,SUM(amount) amount 
FROM tbl_paid WHERE pay_date >= NOW() - INTERVAL 6 DAY 
GROUP BY Day(pay_date)

结果:

| pay_day | amount |
|---------|--------|
|       1 |    246 |
|       2 |    200 |
|      28 |   1702 |
|      29 |   1462 |
|      30 |    864 |
|      31 |   1092 |

测试数据:

| amount |             pay_date |
|--------|----------------------|
|    100 | 2018-06-02T00:00:00Z |
|    123 | 2018-06-01T00:00:00Z |
|    546 | 2018-05-31T00:00:00Z |
|    432 | 2018-05-30T00:00:00Z |
|    731 | 2018-05-29T00:00:00Z |
|    851 | 2018-05-28T00:00:00Z |
|    100 | 2018-06-02T00:00:00Z |
|    123 | 2018-06-01T00:00:00Z |
|    546 | 2018-05-31T00:00:00Z |
|    432 | 2018-05-30T00:00:00Z |
|    731 | 2018-05-29T00:00:00Z |
|    851 | 2018-05-28T00:00:00Z |
|    436 | 2018-05-27T00:00:00Z |

SQL Fiddle Demo Link


如果您想了解更多信息,那么

您可以使用weekday()DAYNAME()

SELECT WEEKDAY(pay_date) WEEKDAY,DAYNAME(pay_date) DAYNAME,SUM(amount) amount 
FROM tbl_paid WHERE pay_date >= NOW() - INTERVAL 7 DAY 
GROUP BY WEEKDAY(pay_date),DAYNAME(pay_date)

结果:

| WEEKDAY |   DAYNAME | amount |
|---------|-----------|--------|
|       0 |    Monday |   1702 |
|       1 |   Tuesday |   1462 |
|       2 | Wednesday |    864 |
|       3 |  Thursday |   1092 |
|       4 |    Friday |    246 |
|       5 |  Saturday |    200 |
|       6 |    Sunday |   1287 |

SQL Fiddle Demo Link

【讨论】:

  • 这太棒了。非常感谢。
  • 但是,先生。我该如何排列这个?例如 $date = array("array of selected")
  • 我想在我的条形图上使用它
  • 以及如何将它的值传递给 php? @IT微寒
  • 尝试使用mysql_fetch_array,关注此视频PHP MySql Fetch multiple data - YouTube@Arvin Jason Cabrera
【解决方案2】:

如果你必须通过日期然后做:

SELECT DATE(pay_date) `DATE`, SUM(amount) daily_amount
FROM tbl_paid 
WHERE DATE(pay_date) BETWEEN DATE(:today) - INTERVAL 1 WEEK AND DATE(:today)
GROUP BY DATE(pay_date);

否则使用数据库的当前日期。

SELECT DATE(pay_date) `DATE`, SUM(amount) daily_amount
FROM tbl_paid 
WHERE DATE(pay_date)>=CURRENT_DATE - INTERVAL 1 WEEK
GROUP BY DATE(pay_date);

您不需要运行查询七次。记住;不要重复自己(DRY)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多