Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.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
Php MySQL分组依据,按两列排序_Php_Mysql_Greatest N Per Group - Fatal编程技术网

Php MySQL分组依据,按两列排序

Php MySQL分组依据,按两列排序,php,mysql,greatest-n-per-group,Php,Mysql,Greatest N Per Group,我想知道每部电影的最后一集的名字 表结构: +---------+------------+---------------+ | id | movie_id | episode_name | +---------+------------+---------------+ | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 1

我想知道每部电影的最后一集的名字

表结构:

+---------+------------+---------------+
|     id  |  movie_id  |  episode_name |
+---------+------------+---------------+
|      1  |         1  |             1 |
|      2  |         1  |             2 |
|      3  |         1  |             3 |
|      4  |         2  |             1 |
|      5  |         3  |             1 |
|      6  |         2  |             2 |
|      7  |         1  |             4 |
|      8  |         2  |             3 |
|      9  |         4  |             1 |
+---------+------------+---------------+
问题1:

SELECT * FROM episode
group by movie_id
order by id desc, episode_name desc LIMIT 10
问题2:

SELECT * FROM episode
WHERE movie_id IN (select movie_id from episode group by movie_id)
group by movie_id
order by episode_name desc
但是输出不是我想要的,也许我做得不对

+--------+------------+---------------+
|  id    |  movie_id  |  episode_name |
+--------+------------+---------------+
|     9  |         4  |             1 |
|     5  |         3  |             1 |
|     4  |         2  |             1 |
|     1  |         1  |             1 |
+--------+------------+---------------+
我期望的结果是:

+---------+------------+---------------+
|     id  |  movie_id  |  episode_name |
+---------+------------+---------------+
|      9  |         4  |             1 |
|      8  |         2  |             3 |
|      7  |         1  |             4 |
|      5  |         3  |             1 |
+---------+------------+---------------+

这是一个非常常见的问题,我们可以在MySQL中通过将
插曲
表连接到一个子查询来处理这个问题,该子查询可以查找每部电影的最新插曲。这种方法为我们提供了完全匹配的最新记录,包括
id
列,然后我们可以使用该列对结果集进行排序

SELECT e1.*
FROM episode e1
INNER JOIN
(
    SELECT movie_id, MAX(episode_name) AS max_episode_name
    FROM episode
    GROUP BY movie_id
) e2
    ON e1.movie_id = e2.movie_id AND
       e1.episode_name = e2.max_episode_name
ORDER BY
    e1.id DESC;

如果您只需要最后一集的名称,并且如果我遵循表中的逻辑,您可以尝试在SELECT查询中使用MAX(),这样您将只获得“集名称”(模式信息)列的MAX结果


这是您想要的吗?

“在这种情况下,服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则所选的值是不确定的,这可能不是您想要的。”电影id不能唯一地确定
id
值。因此,此查询将出错或生成不可靠的结果。我的anwser的想法更多地是关于使用“MAX()”,抱歉,如果查询不好,我将其添加为示例
SELECT id, movie_id, MAX(episode_name) 
FROM table GROUP BY movie_id 
ORDER BY id DESC