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

我将返回系列的最后一集由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();