Laravel 5.1 - 通过id和sum值从数据库组中获取数据

时间:2016-07-20 15:36:36

标签: php mysql laravel-5.1

我不知道如何解决这个问题,我需要从表中获取数据,并将每个字段的值加在一起,其中ID是相同的。

我尝试过的事情

  • 拉出所有数据并尝试将重复数据存储在数组中,然后将其排序为

$users = User::all();

   $array = [];
    foreach($users as $user)
        {
            array_push($array, [$user->account_id => $user->amount]);
        }
  • 使用laravel集合来存储数组数据并通过那里对其进行排序

除此之外,我不太确定如何去做!这是我从数据库中提取的数据。

0: {1: 100.00}
1: {1: 100.00}
2: {2: 100.00}
3: {2: 100.00}

这是我想要的输出

0: {1: 200.00}
1: {2: 200.00}

这就是我所需要的一切我觉得它非常简单,但我不知道,任何帮助和指导将不胜感激,将提供所需的任何进一步信息。

3 个答案:

答案 0 :(得分:1)

尝试这种方式:

<?php
User::groupBy('account_id')
   ->selectRaw('sum(amount) as sum, account_id')
   ->lists('sum','account_id');

修改

由于->lists()现已在laravel 5.2+中弃用,现在应为->pluck(),仅供参考

答案 1 :(得分:1)

如果您想使用PHP进行分组并对其求和,请尝试:

$users = array(
    array(
        "account_id" => 1,
        "amount" => 100
    ),
    array(
        "account_id" => 1,
        "amount" => 100
    ),
    array(
        "account_id" => 2,
        "amount" => 100
    ),
    array(
        "account_id" => 2,
        "amount" => 100
    ),
    array(
        "account_id" => 2,
        "amount" => 100
    ),
    array(
        "account_id" => 2,
        "amount" => 100
    )
);
$response = array();
foreach ($users as $usersIndex => $usersValue) {
    if (!isset($response[$usersValue["account_id"]])) {
        $response[$usersValue["account_id"]][$usersValue["account_id"]] = 0;
    }
    $response[$usersValue["account_id"]][$usersValue["account_id"]] += $usersValue["amount"];
}
$response = array_values($response);
var_dump($response);

输出:

array(2) { [0]=> array(1) { [1]=> int(200) } [1]=> array(1) { [2]=> int(400) } }

但是对于该操作,您应该使用groupBy和sum查询。

答案 2 :(得分:1)

这是一个例子:

$users = DB::table('users')
                ->select('id', DB::raw('SUM(amount) as total_amount'))
                ->groupBy('id')
                ->get();