0

快速概述,我正在尝试从我的论坛表中获取最后 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,因为它们具有相同的标题)。

有什么想法吗????

4

1 回答 1

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。group by 查询正在获取最低的 ID,因此即使它正在工作,它也不是您正在寻找的解决方案。

于 2013-10-06T12:56:42.153 回答