所以我正在制作一个模拟冰球联赛的网站。
我在试着做排名,这就是事情变得复杂的地方。
有2个会议。东方和西方
在每个会议中,有3个部门,为了便于示例,我们称它们为A,B和c。
每个赛区有5个小组,小组1,小组2,小组3,小组4,小组5。
这就是问题所在
排名由会议组成。例如,东方和西方是分开的。每个赛区的第一名队伍自动获得分区前三名的种子名额。
例如,A赛区1队得5分,A赛区2队得4分,B赛区4队得4分(其余队得少),C赛区5队得3分(其余队得少)。排名应该是:A组1队5分2-第四队- B组- 4分3-第五队- C组- 3分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是不赞成的,而且,我想使用雄辩,因为这种类型的代码将在其他地方使用
我不相信CASE已经在QueryBuilder上可用了。所以你有两个选择:
替换DB::query():
DB::select(DB::raw('select * from users'));
或者您可以使用QueryBuilder和CASE部分创建所有这些,您可以添加一些raw,像这样:
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
我相信如果你有Users模型,你可以使用
User::where('status', '<>', 1)
->groupBy('status')
->get([DB::raw('count(*) as user_count, status')]);