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
。发生了相同的事情。第二个数组机会和为空。