Я хочу получить название последнего эпизода каждого фильма
Структура таблицы:
+---------+------------+---------------+
| 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, присоединившись к episode
таблица подзапрос, который находит последний эпизод для каждого фильма. Этот подход дает нам полное соответствие последних записей, в том числе 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;
Если вам нужен только последний эпизод_имя и если я следую логике вашей таблицы, вы можете попытаться использовать MAX () в своем запросе SELECT, поэтому вы получите только максимальный результат для вашего столбца «episode_name» (информация о режиме) Вот)
SELECT id, movie_id, MAX(episode_name)
FROM table GROUP BY movie_id
ORDER BY id DESC
Это то, что вы ищете?