快速浏览,我正在尝试从论坛表格中获取最后5个论坛帖子,以便在RHS列中向用户显示。
我还想要的是这个列表应该只显示独特的论坛帖子标题(有时候用户在多个论坛上发布相同的帖子,我不希望我的RHS盒子显示可能相同的5个“标题”,即使他们在不同的论坛类别)。
但是这个sql工作并不安静...它完全跳过任何多次具有相同标题的论坛帖子,我仍然想要多个标题条目,但只有一个。
SELECT
f.id,
f.title,
fm.url_path
FROM forum_posts AS f
INNER JOIN forum_master AS fm
ON f.forum_id = fm.id
WHERE deleted = 0
AND blacklisted = 0
GROUP BY f.title
ORDER BY f.id DESC
LIMIT 5
例如,请考虑此表
id title
1 a
2 b
3 c
4 d
5 e
6 f
7 f
我想要返回id的7,5,4,3,2。我仍然想要一个标题为f的实例,但只有一个。我的代码似乎是返回1-5(完全跳过id 6-7,因为它们具有相同的标题)。
任何想法????
答案 0 :(得分:0)
尝试我在这里的嵌套查询:http://sqlfiddle.com/#!2/758b3e/11
SELECT
f.title,
f.id,
fm.url_path
FROM forum_posts AS f
INNER JOIN forum_master AS fm
ON f.forum_id = fm.id
WHERE deleted = 0
AND blacklisted = 0
AND (SELECT id
FROM forum_posts
WHERE title = f.title
ORDER BY id DESC
LIMIT 1) = f.id
ORDER BY f.id DESC
LIMIT 5
而不是使用group by(我相信在这种情况下会在Oracle中失败 - 无法使用多个ID进行分组)我在WHERE子句中将id过滤为单一可能性,这会删除重复项并且最高ID。按查询分组抓取了最低的ID,所以即使它正在运行,它也不是您正在寻找的解决方案。