【问题标题】:Complicated query using eloquent - Laravel 4使用 eloquent 的复杂查询 - Laravel 4
【发布时间】:2013-05-30 07:50:26
【问题描述】:

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

我正在努力提高排名,这就是它变得复杂的地方。

有 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- Team 1 - Division A - 5 分 2- 第 4 队 - B 区 - 4 分 3- 第 5 队 - 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,因为这种相同类型的代码将在其他地方使用。

【问题讨论】:

    标签: php mysql sql laravel laravel-4


    【解决方案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();
    

    【讨论】:

      【解决方案2】:

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

      User::where('status', '<>', 1)
            ->groupBy('status')
            ->get([DB::raw('count(*) as user_count, status')]);
      

      【讨论】:

        猜你喜欢
        • 2015-12-06
        • 2021-11-16
        • 2014-08-18
        • 2015-05-16
        • 2021-02-02
        • 2018-02-02
        • 2015-02-13
        • 2014-04-27
        • 2017-01-14
        相关资源
        最近更新 更多