所以我正在建立一个模拟冰球联赛的网站。
我正在努力争取积分榜,这就是它变得复杂的地方。
有2个会议。东西方。
在每个会议中,有3个部门,为了示例,我们称之为A,B和C.
每个部门有5个团队,第1组,第2组,第3组,第4组,第5组。
所以这就是它变得棘手的地方。
排名由会议组成。例如,东西方有一个单独的排名。每个部门的顶级团队将自动播种在会议的前3个位置。
例如,A组的1队有5分,A组的2队有4分,B组的4队有4分(其余的得分少),C组的5队有3分(其余的得分)减)。 排名应该是: 1-第1组 - A组 - 5分 2-第4队 - B组 - 4分 3-第5队 - C组 - 3分 4-第2队 - A组 - 4分 ...
我的代码是:
$teams_east = DB::query("SELECT a.*, (CASE WHEN b.scoreMax IS NULL THEN 1 ELSE 2 END) AS SortFiddle
FROM (SELECT teams.*, teamdetails.division, ((`nhl_wins` *2) + `nhl_ot` + `nhl_ties`) AS scoreMax
FROM teams
LEFT JOIN teamdetails ON teams.team_name = teamdetails.pro_name
WHERE teamdetails.conference ='Est' ) a
LEFT OUTER JOIN
(SELECT division, MAX((`nhl_wins` *2) + `nhl_ot` + `nhl_ties`) AS scoreMax
FROM teams
LEFT JOIN teamdetails ON teams.team_name = teamdetails.pro_name
WHERE teamdetails.conference ='Est' GROUP BY division ORDER BY `nhl_wins`,scoreMax LIMIT 3) b
ON a.division = b.division
AND a.scoreMax = b.scoreMax
ORDER BY SortFiddle DESC, a.scoreMax DESC, `nhl_wins` DESC, nhl_gf DESC, nhl_ga ASC");
但DB :: query已被弃用,而且,我想使用eloquent,因为同样的代码将在其他地方使用。
答案 0 :(得分:1)
我不相信CASE已经在QueryBuilder上可用了。所以你有两个选择:
这是DB :: query()的替代品:
DB::select(DB::raw('select * from users'));
或者您可以使用QueryBuilder创建所有内容,CASE部分可以添加一些原始内容,如下所示:
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
答案 1 :(得分:0)
我相信如果你有用户型号,你可以使用
User::where('status', '<>', 1)
->groupBy('status')
->get([DB::raw('count(*) as user_count, status')]);