2016-05-31 9 views
2

Hier ist meine Tabellen Beziehung:Laravel SQL groupBy Und Sum

**reservations** id, date, etc...<br> 
**reservation_service_info** service_info_id, reservation_id<br> 
**services_info** price etc... 

Ich versuche Reservationspreis von Tag zu summieren. Hier ist der Code und Ergebnis:

return $query->selectRaw('DATE(start_time) AS date') 
     ->selectRaw("(SELECT SUM(price) FROM `services_info` inner join `reservation_service_info` on `services_info`.`id` = `reservation_service_info`.`service_info_id` where `reservation_service_info`.`reservation_id` = reservations.id) as price") 
     ->orderBy('date', 'ASC') 
     ->get('price', 'date') 

Ergebnis:

[ 
    { 
    "date": "2016-06-01", 
    "price": "345.00" 
    }, 
    { 
    "date": "2016-06-01", 
    "price": "90.00" 
    }, 
    { 
    "date": "2016-06-01", 
    "price": "222.00" 
    }, 
    { 
    "date": "2016-06-02", 
    "price": "393.00" 
    }, 
    { 
    "date": "2016-06-02", 
    "price": "142.00" 
    } 
] 

Wenn ich groupBy('date') in der Abfrage es Gruppen hinzuzufügen durch dosent SUM (Preis)

[ 
    { 
    "date": "2016-06-01", 
    "price": "345.00" 
    }, 
    { 
    "date": "2016-06-02", 
    "price": "393.00" 
    } 
] 

Antwort

1

Dieses Versuchen:

    $users= DB::table('reservation_service_info') 
        ->join('services_info', 'reservation_service_info.service_info_id', '=', 'services_info.id') 
        ->join('reservations', 'reservation_service_info.reservation_id', '=', 'reservations.id') 
        ->select('DATE(reservations.start_time) AS date','SUM(services_info.price) AS price') 
        ->orderBy('reservations.start_time', 'ASC') 
        ->groupBy('reservations.start_time') 
        ->get(); 
0

Sie sollten sum(price) verwenden um die Summe zu erhalten:

return $query->selectRaw('DATE(start_time) AS date') 
     ->selectRaw("(SELECT SUM(price) FROM `services_info` inner join `reservation_service_info` on `services_info`.`id` = `reservation_service_info`.`service_info_id` where `reservation_service_info`.`reservation_id` = reservations.id) as price") 
     ->orderBy('date', 'ASC') 
     ->groupBy('date') 
     ->get(); 
+0

Ja, ich versuche, aber ich bekomme gleiche Wirkung, weil diese Auswahlabfrage nur eine Zeile Auswählen ... – DokiCRO

+0

@ user3806764 Könnten Sie dann Ihre Frage und zeigen gewünschtes Ergebnis bearbeiten? –

+0

Natürlich ist ich jetzt verändert. – DokiCRO

1

Ich denke, dass Ihre Abfrage in ein bisschen falsch gebaut wurde. Ich würde diese Denkweise vorschlagen:

return $query->select(\DB::raw('DATE(start_time) AS date'), \DB::raw('SUM(price) as price')) 
     ->join('reservation_service_info', 'reservations.id', '=', 'reservation_service_info.reservation_id') 
     ->join('services_info', 'services_info.id', '=', 'reservation_service_info.services_info_id') 
     ->orderBy('date', 'ASC') 
     ->groupBy('date') 
     ->get(); 

Dies sollte funktionieren, wenn die $query Tabelle reservations ist.