所以我正在制作一个模拟曲棍球联赛的网站。
我正在努力提高排名,这就是事情变得复杂的地方。
有 2 个 session 。东西方。
在每个 session 中,有3个部门,为了举例起见,我们称它们为A、B和C。
每个赛区有 5 支队伍,第 1 队、第 2 队、第 3 队、第 4 队、第 5 队。
这就是它变得棘手的地方。
排名由 session 组成。例如,东方和西方有不同的排名。每个部门的顶级团队将自动进入大会前 3 名。
例如,A组1队5分,A组2组4分,B组4组4分(其余少),C组5组3分(其余组)较少的)。 排名应该是: 1- Team 1 - Division A - 5 分 2- Team 4 - Division B - 4 分 3- Team 5 - Division C - 3 分 4- Team 2 - Division 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,因为这种相同类型的代码将在其他地方使用。
最佳答案
我不认为 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();
关于php - 使用 Eloquent 复杂查询 - Laravel 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16908984/