2016-06-15 2 views
0

У меня есть таблица, которая содержит следующие данные:результатов Группы DB по дате в 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(); 

ТОГДА

foreach($data as $row){ 

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

           }; 
+0

У вас есть опечатка или вы забыли апостроф на выбор 'date'' который должен быть' 'date'' – Burak

+0

что является Probleme? –

+0

@AchrafKhouadja, если вы посмотрите ниже, где Drown попытался помочь, я пытаюсь отозвать дату вместе с общей суммой за этот день – Matt

ответ

0

Потому что дата на самом деле дата и время , Я сделал новый запрос для этого, который будет группироваться по дате (вплоть до дня) и получить общее количество в одном запросе. Это не очень красноречиво, но после некоторых исследований я понял, что это, пожалуй, самый простой способ сделать это за один раз.

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

    return var_dump($data); 
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" 
    } 
] 
+0

спасибо, что это работает само по себе, но как я могу связать это с другим DB :: raw() для общего количества, поскольку он выдает ошибку, когда я пытаюсь сделать то и другое. – Matt

+0

Я обновил свой ответ с помощью 'SUM (total)' part, это то, что вам нужно? – Drown

+0

да, мне нужно обоим, поскольку я могу делать их отдельно, но не вместе, спасибо за помощь, но ваш пример выше, однако, не работает. – Matt

Смежные вопросы