2

そこで、シミュレートされたホッケー リーグの Web サイトを作成しています。

私は順位を上げようとしていますが、ここが複雑なところです。

2つの会議があります。東と西。

各会議には 3 つの部門があり、例として A、B、C とします。

部門ごとに、チーム 1、チーム 2、チーム 3、チーム 4、チーム 5 の 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 は非推奨であり、さらに、この同じ種類のコードが別の場所で使用されるため、雄弁を使用したいと考えています。

4

2 に答える 2

1

CASE が既に QueryBuilder で利用できるとは思えません。したがって、次の 2 つのオプションがあります。

これは 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();
于 2013-06-04T02:47:54.880 に答える
0

Users モデルがあれば、使用できると思います

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