0
我正在研究一個運動隊的應用程序,並試圖總計(總計)每個球員在整個賽季中得分的進球。我有一個查詢,如下所示:基於ID查詢多列的求和方法
$GMC = DB::table('matchcards')->where('grade_id', $gradeId)->select('id')->get();
foreach($GMC as $object)
{
$arrays[] = (array) $object;
}
$GMCX = collect($arrays)->flatten();
foreach ($GMCX as $mc) { //Loop 1 - Get a list of all matchcards for this grade
$im = DB::table('matchcards')->distinct()->select('capt', 'gk', 'player3', 'player4', 'player5', 'player6', 'player7', 'player8'
, 'player9', 'player10', 'player11', 'player12', 'player13', 'player14', 'player15', 'player16')->where('id', $mc)->get();
foreach ($im as $object2) {
$arrays2[] = (array)$object2;
}
$imx = collect($arrays2)->flatten(); //Gets all the PlayedIDs from above loop
} //end of Loop 1
$gp ='0'; $gamesplayed= array(); $collection = collect(); $M='0';
foreach ($imx as $p) { //loop 2 - take each id and count games played
$_GET['p'] = $p;
$pcount = DB::table('matchcards')->where('capt', $p)->where('grade_id', $gradeId)->orWhere('gk', $p)->orWhere('player3', $p)
->orWhere('player4', $p)->orWhere('player5', $p)->orWhere('player6', $p)->orWhere('player7', $p)
->orWhere('player8', $p)->orWhere('player9', $p)->orWhere('player10', $p)->orWhere('player11', $p)
->orWhere('player12', $p)->orWhere('player13', $p)->orWhere('player14', $p)->orWhere('player15', $p)
->orWhere('player16', $p)->get();
$gp = count($pcount);
if (count($pcount) > 0){ //Get Players Full Name
$pn = DB::table('players')->select('id', 'fname', 'lname')->where('id', $p)->get();
if (count($pn)>0) {
$pname = $pn[0]->fname." ".$pn[0]->lname;
}
$M = DB::table('matchcards')
->select('p1scorer', 'p1goals','p2scorer', 'p2goals', 'p3scorer', 'p3goals','p4scorer', 'p4goals', 'p5scorer', 'p5goals','p6scorer', 'p6goals')
->where('grade_id', '=', $gradeId)
->Where(function ($query) {
$p = $_GET['p'];
$query->where('p1scorer', '=', $p)
->orWhere('p2scorer', '=', $p)
->orWhere('p3scorer', '=', $p)
->orWhere('p4scorer', '=', $p)
->orWhere('p5scorer', '=', $p)
->orWhere('p6scorer', '=', $p);
})
->sum(DB::raw('p1goals + p2goals + p3goals + p4goals + p5goals + p6goals'));
//->select(DB::raw('sum(p1goals + p2goals + p3goals + p4goals + p5goals + p6goals) as goals_scored'))->get();
}
//Add all objects into collection/
$collection->push(['id' => $p, 'gp' => $gp, 'pname' => $pname, 'gs' => $M]);
} //end of loop 2
$unique = $collection->unique(); //Removed duplicate IDs
它是隻返回誰拿下的人 - 所以它的一半工作。我只是不知道如何合併該用戶的目標(跨越6個可能的列)。目前,我的查詢將該特定比賽/遊戲(或數據庫中的行)的所有目標添加到玩家。
有6個可能的列,每個教練可以選擇6名球員進球(因此,p1scorer和p1goals屬於一起,p2scorer和p2goals屬於一起...每週的playerID可以在任何一個P1scorer到p6scorer列 - 但從不重複在同一行)。情景示例第1周(第1行)p1scorer是17(球員ID),他們打入2球(因此p1goals中有2個)。此外,p2scorer是5誰獲得了1個目標 - 所以總共3個目標 - 想發送到該行的數組(目標:17目標:2){id:5目標:1},並循環所有其他行和添加。目標爲誰拿下整個賽季每個人現有的理貨
希望有人也許能夠幫助我在這裏...在此先感謝...
感謝您的幫助/建議...當我在查詢之外移動GET命令時,子查詢中的$ p返回「未定義變量」,這就是爲什麼我在查詢中使用它。然而,這部分似乎工作正常(因爲我只獲得了陣列中的進球得分手 - 我的問題/挑戰是在整個大約20行的回報中,在六列中的一列中添加與$ p(ID)相關聯的目標這就是我卡在...歡呼 – Jimmy
@Jimmy讓我檢查它 –
@Jimmy請檢查我的$ p變量的更新答案 –