Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用嵌套子句对查询结果排序_Mysql_Sql_Laravel_Eloquent - Fatal编程技术网

Mysql 使用嵌套子句对查询结果排序

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 |

我正在为我的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上使用
groupBy()
,而不是
orderBy()
。您可以在
orderByRaw()
方法中添加
、id DESC
,或者添加
orderBy('id','DESC')
来代替
groupBy()
方法

在这种情况下使用
groupBy('id')
没有什么意义,因为它是唯一的

$posts=Post::orderByRaw(“字段(状态,'pending','review','approved','closed'))
->orderBy('id','desc')
->分页(5)
->toJson();

按ID分组没有任何意义,因为它们是唯一的