在Laravel中按日期分组DB结果

时间:2016-06-15 15:57:44

标签: mysql laravel

我有一个包含以下数据的表:

+--------|-----------|-------------+
|  id    |  date     |   total     |
|--------|-----------|-------------|
|   1    | 2016-01-01|    10       |
|--------|-----------|-------------|
|   2    | 2016-01-01|    20       |
|--------|-----------|-------------|
|   3    | 2016-01-02|    25       |
+----------------------------------+

我想获得以下结果:

Date : 2016-01-01 | Total : 30
Date : 2016-01-02 | Total : 25

如果添加了另一个日期,它也会显示。 它必须只提供该日期的日期和总金额。

这是我尝试过的,它打印出每个日期以及每个日期,而不是1日期与当天的主要日期。

    $data = DB::table('records')
       ->select(DB::raw('sum(total) as total'), 'id', 'date')                      
       ->where('date', '>=', \Carbon\Carbon::now()->startOfMonth())
       ->groupBy('date')
       ->orderBy('id', 'ASC')
       ->get();

THEN

foreach($data as $row){

                                    echo $row->date . "<br>";
                                    echo $row->total;

                                };

2 个答案:

答案 0 :(得分:0)

这将为您提供所需的数据:

 $data = DB::table('records')
    ->select(DB::raw('date, SUM(total) as total'))
    ->groupBy('date')
    ->get();

示例输出(使用我自己的测试数据):

[
  {
    "date": "2016-09-17",
    "total": "30"
  },
  {
    "date": "2016-09-18",
    "total": "23"
  },
  {
    "date": "2016-09-19",
    "total": "593"
  }
]

答案 1 :(得分:0)

因为日期实际上是日期时间,所以我为此创建了一个新查询,该查询将按日期分组(截至当天)并在单个查询中获得总计。这不是很有说服力,但经过一些研究,我认为这可能是一次性完成这项工作的最简单方法。

$data = DB::table('records')
    ->select(DB::raw('date, SUM(total) as total'))
    ->groupBy(DB::raw('DATE(date)'))
    ->get();

    return var_dump($data);