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