【发布时间】:2019-08-08 09:10:54
【问题描述】:
我正在为我的 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 |
| 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 分组从来没有任何意义,因为它们是唯一的
标签: mysql sql laravel eloquent