我不知道为什么我不能按照我想要的方式进行查询,希望你能开导我。
SELECT e.id,
e.num,
e.name,
s.name as s_name,
t.num as t_num,
e.show_id
FROM s_episodes e
LEFT JOIN shows s ON s.id = e.show_id
LEFT JOIN s_seasons t ON t.id = e.season_id
GROUP BY e.show_id
ORDER BY e.dateadded DESC
dateadded是一个int(unix timepost)。 e.num,t.num也是int。
是否应该显示添加的最新剧集,但是当GROUP BY对行进行分组时,列出的剧集不是最新剧集,而是最新一季(剧集编号由e.num表示)的最新剧集(季节)节目的数字由t_num表示(但是,节目按照最新剧集的日期排序,但是所列的剧集是本季的第一集,而不是最后一集)。
有什么想法吗?
我希望自己明白,对任何英语错误感到抱歉。感谢。
答案 0 :(得分:3)
当您按一个字段分组并且结果字段不是它的一部分时(或者在您的情况下是按字段的顺序),结果是不可预测的。
您需要将其添加到分组依据 或者在您的情况下,使用聚合函数:
ORDER BY MAX(e.dateadded) DESC
修改强>:
你真的需要LEFT JOIN
或者那些可能是常规的内连接吗?
由于您还需要显示最新一集的字段,您可以尝试:
SELECT e.id,
e.num,
e.name,
s.name as s_name,
t.num as t_num,
e.show_id
FROM shows s
JOIN s_episodes e ON e.id =
(SELECT id
FROM s_episodes
WHERE show_id = s.id
ORDER BY dateadded DESC LIMIT 1)
LEFT JOIN s_seasons t ON t.id = e.season_id
ORDER BY e.dateadded DESC
答案 1 :(得分:0)
您需要先确定为给定节目添加的最新剧集。然后你可以添加其余的数据。
SELECT a.dateadded,
e.id,
e.num,
e.name,
s.name as s_name,
t.num as t_num,
e.show_id
from
(select max(dateadded) maxdate, show_id
FROM s_episodes
group by show_id)a
inner join s_episodes e
on e.show_id = a.show_id
and e.dateadded = a.maxdate
LEFT JOIN shows s ON s.id = e.show_id
LEFT JOIN s_seasons t ON t.id = e.season_id