复杂的 OrderBy 使用多列
Posted
技术标签:
【中文标题】复杂的 OrderBy 使用多列【英文标题】:Complex OrderBy using multiple columns 【发布时间】:2019-07-07 06:56:21 【问题描述】:我有一个足球赛事表,它显示基于minute
和extra_minute
的赛事。例如:
id | type | minute | extra_minute | reason
1 | yellowcard | 45 | null | null
2 | yellowcard | 45 | 1 | null
3 | period | 45 | null | HT
4 | goal | 45 | 2 | null
5 | goal | 46 | 2 | null // this is second half
6 | period | 90 | null | FT
7 | goal | 90 | 2 | null
顺序应该是
yellowcard (45)
yellowcard (45+1)
goal (45+2)
HT
goal (46)
goal (90+2)
FT
我在 Match 中尝试了一个关系查询,例如
public function events()
return $this->hasMany(Event::class)->orderBy('minute', 'asc')
->orderBy('extra_minute', 'asc');
但这会导致
HT
yellowcard (45)
yellowcard (45+1)
goal (45+2)
...
使用 Laravel Query Builder 对所需样式进行排序的方式是什么? 我知道为什么我的查询生成器不工作,但我无法想出一些东西来实现我想要的
【问题讨论】:
【参考方案1】:->orderByRaw('type = ? asc', 'period')
是这样做的方法。
return $this->hasMany(Event::class)
->orderBy('minute', 'asc')
->orderByRaw('type = ? asc', 'period')
->orderBy('et_minute', 'asc');
【讨论】:
以上是关于复杂的 OrderBy 使用多列的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark orderBy 在对多列进行排序时给出不正确的结果
如何在 GROUP BY 和 ORDER BY 中使用多列但只有一列