2

所以我正在为模拟曲棍球联赛制作一个网站。

我正在努力进入积分榜,这就是它变得复杂的地方。

有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,因为这种相同类型的代码将在其他地方使用。

4

2 回答 2

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();
于 2013-06-04T02:47:54.880 回答
0

我相信如果你有用户模型,你可以使用

User::where('status', '<>', 1)
      ->groupBy('status')
      ->get([DB::raw('count(*) as user_count, status')]);
于 2014-11-21T13:08:26.077 回答