Mysql 使用嵌套子句对查询结果排序
我正在为我的Laravel应用程序使用此数据库表:Mysql 使用嵌套子句对查询结果排序,mysql,sql,laravel,eloquent,Mysql,Sql,Laravel,Eloquent,我正在为我的Laravel应用程序使用此数据库表: | id | description | status | timestamp | |----|-------------|----------|------------| | 1 | Lorem ipsum | pending | 2019-08-01 | | 2 | Lorem ipsum | approved | 2019-08-01 | | 3 | Lorem ipsum | pending | 2019-08-01 |
| id | description | status | timestamp |
|----|-------------|----------|------------|
| 1 | Lorem ipsum | pending | 2019-08-01 |
| 2 | Lorem ipsum | approved | 2019-08-01 |
| 3 | Lorem ipsum | pending | 2019-08-01 |
| 4 | Lorem ipsum | approved | 2019-08-01 |
| 5 | Lorem ipsum | review | 2019-08-01 |
| 6 | Lorem ipsum | review | 2019-08-01 |
| 7 | Lorem ipsum | closed | 2019-08-01 |
| 8 | Lorem ipsum | pending | 2019-08-01 |
| 9 | Lorem ipsum | approved | 2019-08-01 |
...
此表所需的排序逻辑为:
pending > review > approved > closed
然后,每个子组必须按
id, DESC
因此,期望的结果应该是:
| id | description | status | timestamp |
|----|-------------|----------|------------|
| 8 | Lorem ipsum | pending | 2019-08-01 |
| 3 | Lorem ipsum | pending | 2019-08-01 |
| 1 | Lorem ipsum | pending | 2019-08-01 |
| 6 | Lorem ipsum | review | 2019-08-01 |
| 5 | Lorem ipsum | review | 2019-08-01 |
| 9 | Lorem ipsum | approved | 2019-08-01 |
| 4 | Lorem ipsum | approved | 2019-08-01 |
| 2 | Lorem ipsum | approved | 2019-08-01 |
| 7 | Lorem ipsum | closed | 2019-08-01 |
...
我试着用这个雄辩的问题:
$posts = Post::orderByRaw( "FIELD(status, 'pending', 'review', 'approved', 'closed')" )
->groupBy('id')
->paginate(5)
->toJson();
但是,ID顺序为升序:
| id | description | status | timestamp |
|----|-------------|----------|------------|
| 1 | Lorem ipsum | pending | 2019-08-01 |
| 3 | Lorem ipsum | pending | 2019-08-01 |
| 8 | Lorem ipsum | pending | 2019-08-01 |
| 5 | Lorem ipsum | review | 2019-08-01 |
| 6 | Lorem ipsum | review | 2019-08-01 |
| 2 | Lorem ipsum | approved | 2019-08-01 |
| 4 | Lorem ipsum | approved | 2019-08-01 |
| 9 | Lorem ipsum | approved | 2019-08-01 |
| 7 | Lorem ipsum | closed | 2019-08-01 |
...
我不知道如何在按状态分组的每个子结果中首先对id较大的行排序。您在id上使用groupBy()
,而不是orderBy()
。您可以在orderByRaw()
方法中添加、id DESC
,或者添加orderBy('id','DESC')
来代替groupBy()
方法
在这种情况下使用groupBy('id')
没有什么意义,因为它是唯一的
$posts=Post::orderByRaw(“字段(状态,'pending','review','approved','closed'))
->orderBy('id','desc')
->分页(5)
->toJson();
按ID分组没有任何意义,因为它们是唯一的