Laravel 查询生成器 order by 不适用于左连接
Posted
技术标签:
【中文标题】Laravel 查询生成器 order by 不适用于左连接【英文标题】:Laravel query builder order by doesn't work with left join 【发布时间】: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 列与另一列混淆了。谢谢大家的帮助:)
【问题讨论】:
【参考方案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以上是关于Laravel 查询生成器 order by 不适用于左连接的主要内容,如果未能解决你的问题,请参考以下文章
laravel eloquent order by specific value with PostgreSQL 数据库
HSQLDB - 可更新语句不适用于“SELECT TOP”或“ORDER BY”