Php 带联接表的多列求和-Laravel 5.2

Php 带联接表的多列求和-Laravel 5.2,php,laravel,Php,Laravel,我有两张表格winners和check\u winners 获奖者: 勾选优胜者: 现在我想加入两个表,并想通过username将获胜机会列和win\u编号列组相加。我尝试过一种方法,但它并没有给出win\u数之和的确切结果。我怎样才能做到这一点 $winners = DB::table('winners') ->groupBy('winners.username') ->leftJoin('check_winners', 'winne

我有两张表格
winners
check\u winners

获奖者: 勾选优胜者: 现在我想
加入两个表,并想通过
username
获胜机会
列和
win\u编号
列组相加。我尝试过一种方法,但它并没有给出
win\u数之和的确切结果。我怎样才能做到这一点

$winners = DB::table('winners')
            ->groupBy('winners.username')
            ->leftJoin('check_winners', 'winners.id', '=', 'check_winners.user_id')
            ->selectRaw('*, sum(check_winners.chance_of_win) as chance_sum, sum(winners.win_number) as win_sum')         
dd($winners);
有了这个,我得到了输出:

array:2 [▼
  0 => {#241 ▼
    +"id": 1
    +"check_winner_id": 1
    +"username": "xxx"
    +"chance_sum": "2"
    +"win_sum": "2"
  }
  1 => {#242 ▼
    +"id": 2
    +"check_winner_id": 2
    +"username": "yyy"
    +"chance_sum": "6"
    +"win_sum": "6"
  }
]
但是
win\u sum
对于
array
array都应该是
2
。我哪里做错了?提前感谢。

您应该尝试以下方法:

$winners = DB::table('winners')
            ->leftJoin('check_winners', 'winners.id', '=', 'check_winners.user_id')
            ->selectRaw('*, sum(check_winners.chance_of_win) as chance_sum, sum(winners.win_number) as win_sum')
            ->groupBy('winners.username')       
dd($winners);
更新的答案

$winners = DB::table('winners')
            ->select('*', DB::raw("SUM(check_winners.chance_of_win) as chance_sum"), DB::raw("SUM(winners.win_number) as win_sum"))
            ->leftJoin('check_winners', 'winners.id', '=', 'check_winners.user_id')
            ->groupBy('winners.username')
你应该试试这个:

$winners = DB::table('winners')
            ->leftJoin('check_winners', 'winners.id', '=', 'check_winners.user_id')
            ->selectRaw('*, sum(check_winners.chance_of_win) as chance_sum, sum(winners.win_number) as win_sum')
            ->groupBy('winners.username')       
dd($winners);
更新的答案

$winners = DB::table('winners')
            ->select('*', DB::raw("SUM(check_winners.chance_of_win) as chance_sum"), DB::raw("SUM(winners.win_number) as win_sum"))
            ->leftJoin('check_winners', 'winners.id', '=', 'check_winners.user_id')
            ->groupBy('winners.username')

尝试使用distinct('winners.username')而不是groupBy('winners.username')。如果我使用
distinct('winners.username')
,那么我会得到一个带有
win\u sum 10
chance\u sum 2
的数组。我已经添加了我的答案,请检查它的工作情况或not@AddWebSolutionPvtLtd有了你的解决方案,我明白了,第一个
数组
带有值
chance\u sum
win\u sum
两个
8
。第二个
array
chance\u sum null
win\u sum 2
@ChoncholMahmud查看您的“xxx”用户名属于两个用户id 1,2,根据您的leftjoin,当您分组时,如果我使用
distinct,那么您的winners表id 2将跳过distinct('winners.username'),而不是groupBy('winners.username')('winners.username')
然后我得到一个数组,其中包含
win\u sum 10
chance\u sum 2
我已经添加了我的答案,请检查它的工作情况或not@AddWebSolutionPvtLtd根据您的解决方案,我得到了第一个
array
chance\u sum
win\u sum
两个
8
。第二个
array
chance\u sum null
win_sum 2
@ChoncholMahmud看你的“xxx”根据你的leftjoin,用户名属于两个用户id 1,2,当你分组时,我得到的这个解决方案将跳过你的winners表id 2。第一个
数组
带有值
chance\u sum
win\u sum
,第二个
数组
chance\u sum null
win\u sum 2
。相同发生了异常。第二个数组机会和为空。使用此解决方案,我得到。第一个
数组
机会和
赢和
8
。第二个
数组
机会和为空
赢和2
。发生了相同的事情。第二个数组机会和为空。