Laravel / Mysql 分组排序

Laravel / Mysql groupby ordering

我有命令

 SELECT * FROM 
    (SELECT * FROM episodes ORDER BY created_at DESC) and t1 
 GROUP BY serial_id 
 ORDER BY created_at DESC

我将 return 系列,其中最后一集由 created_at 添加。但问题是,当我把它放在主机上时,一切正常,但现在我把它放在 VPS 服务器上,那里总是列出第一集。如果我在 group by serial_id 之后添加 desc 它可以工作但是在 laravel (-> groupBy ('serial_id'))

上是不可能的

共享主机:

+---------+-------------+--------+
| id      | serial_id   | part   |
+---------+-------------+--------+
|    8124 | 12          | s02e10 |
|     362 | 8           | s09e12 |
|    4673 | 9           | s01e12 |
|     871 | 4           | s03e24 |
+---------+-------------+--------+

我的VPS:

+---------+-------------+--------+
| id      | serial_id   | part   |
+---------+-------------+--------+
|    8124 | 12          | s01e01 |
|     362 | 8           | s01e01 |
|    4673 | 9           | s01e01 |
|     871 | 4           | s01e01 |
+---------+-------------+--------+

提前感谢您的帮助

您的查询似乎有很多错误。

缺少 FROMORDER BY

之间的表名
SELECT * FROM (SELECT * FROM 
--                         ^^ where is the tablename ?

ORDER BY episodes created_at DESC) and t1 GROUP BY ORDER BY serial_id created_at DESC
--               ^^ missing comma,  ^^ this 'and' seems in the wrong place and you havent't column for group by and in last another missing comma

尝试这样的事情:

SELECT * FROM ( SELECT * 
            FROM  my_table  ORDER BY episodes,  created_at DESC)  t1 
GROUP BY my_column_for_group_by  
ORDER BY serial_id, created_at DESC

在 laravel 中,您可以使用以下方式分配订单方向:

 ->orderBy('serial_id')
 ->orderBy('created_at',  'DESC')

在这种情况下,您可能必须使用 RAW:groupBy(DB::raw('serial_id desc'))

喜欢下面

DB::table( DB::raw("(SELECT * FROM episodes ORDER BY created_at DESC) and t1") )->groupBy(DB::raw('serial_id desc'))->orderBy('created_at', 'desc')->get();