【问题标题】:Laravel query builder order by doesn't work with left joinLaravel 查询生成器 order by 不适用于左连接
【发布时间】:2016-11-12 19:27:12
【问题描述】:

为什么 orderBy 不起作用,它不是按 nbr_votes 降序排序?

$all_players = DB::table('example_players')->leftJoin('example_votes', 'example_votes.from_player_id', '=', 'example_players.id')
                                           ->select('example_players.id', 'example_players.name', 'example_players.display_name', 'example_players.role', 'example_players.picture', DB::raw("sum(case example_votes.vote when 'like' then 1 else 0 end) as nbr_votes"))
                                           ->orderBy('nbr_votes', 'desc')                                          
                                           ->groupBy('example_players.id')                                         
                                           ->get();

编辑问题已解决 我将 from_player_id 列与另一列混淆了。谢谢大家的帮助:)

【问题讨论】:

    标签: sql laravel laravel-query-builder


    【解决方案1】:

    我认为您应该在订购结果之前进行分组。

    $all_players = DB::table('example_players')->leftJoin('example_votes', 'example_votes.from_player_id', '=', 'example_players.id')
                                                ->select('example_players.id', 'example_players.name', 'example_players.display_name', 'example_players.role', 'example_players.picture', DB::raw("count(example_votes.id) as nbr_votes"))
                                                ->groupBy('example_players.id') 
                                                ->orderBy('nbr_votes', 'desc')                                                                
                                                ->get();
    

    【讨论】:

    • 您好,谢谢您的回答。但是我已经尝试过了,它并没有改变什么。
    【解决方案2】:
    $all_players = DB::table('example_players')->leftJoin('example_votes', 'example_votes.from_player_id', '=', 'example_players.id')
                                               ->select('example_players.id', 'example_players.name', 'example_players.display_name', 'example_players.role', 'example_players.picture', DB::raw("count(example_votes.id) as nbr_votes"))
                                               ->groupBy('example_players.id')                                         
                                               ->orderBy(DB::raw("count(examples_votes.id)"),'desc')                                          
                                               ->get();
    

    这是因为 orderby 不知道你用 as 给该字段的名称。

    【讨论】:

    • ->orderBy(DB::raw("count(overwatch_votes.id)"), 'desc') 改变顺序,但不改变 overwatch_votes.id desc
    • 那是因为我在您的查询中没有看到 overwatch_votes 表?您应该首先加入该表以在其上订购。
    • 谢谢你,但我想按数量来订购examples_voted.id desc
    猜你喜欢
    • 2022-01-20
    • 2014-05-13
    • 2023-04-10
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2014-01-13
    • 2022-01-26
    相关资源
    最近更新 更多