我必须根据动画索引的AniDB ID对其分组,并根据文件自动增量ID以降序显示这些值。
这是我目前所做的:
SELECT
f.id, f.category, f.anidb, f.mal_id, COUNT( * ) AS dupes, f.filename,
a.titles, a.synopsis, a.episodes, a.image, a.rating,
c.name as cat_name, c.id as categoryid
FROM table_files f
LEFT JOIN table_anidb a ON a.id = f.anidb
LEFT JOIN table_categories c ON c.id = f.category
GROUP BY a.id ORDER BY f.id DESC
问题:
我有火影忍者8集。第8集的ID为204。而ep.1的ID为160。查询返回如下:
id | anidb | filename | dupes | cat_name
--------------------------------------------------------
201 | 8692 | SAO | 1 | Series
200 | 9251 | RYO | 1 | Movie
.....
.......
160 | 239 | Naruto ep.1 | 8 | Series
但我希望将火影忍者第8集显示在结果的顶部,而不是最后一集。
如何使用
OR
逻辑同时将anidb和mal_id分组?这样,即使没有提供任何anidb ID,也可以进行分组。 最佳答案
广告。 1。
由于id
,anidb
和filename
都在一个表中,所以恐怕您无法摆脱进行子查询联接的麻烦:
SQLFiddle
SELECT f.id, f.anidb, f.filename
FROM files f
JOIN
(SELECT MAX(id) as id FROM files GROUP BY anidb) AS f2
ON f2.id = f.id
ORDER BY f.id DESC
(为了便于阅读,对数据进行了扁平化处理,但是您可以得到一般的想法)
广告。 2。
至于第二个问题,您实际上只需要向上面连接的子查询添加第二个分组列:
SQLFiddle
SELECT f.id, f.anidb, f.mal_id, f.filename
FROM files f
JOIN
(SELECT MAX(id) as id FROM files GROUP BY anidb, mal_id) AS f2 on f2.id = f.id
ORDER BY f.id DESC
NULL
彼此不同(例如NULL!= NULL),因此不用担心分组会将所有空的anidb
行融为一体。