Php SQL-如何提取不重复的论坛主题?

Php SQL-如何提取不重复的论坛主题?,php,sql,forum,punbb,Php,Sql,Forum,Punbb,在我的网站主页上,我想显示论坛的最新帖子,但我不想显示同一主题两次。我如何修改下面的代码来执行此操作 基本上显示最新帖子,但每个论坛主题/帖子只显示一次。更改此行 'SELECT' => 'p.id, p.message, t.subject', 到 换行 'SELECT' => 'p.id, p.message, t.subject', 到 添加一个条件以仅保留主题中最后一篇文章的记录: WHERE p.id = ( SELECT pp.id FROM

在我的网站主页上,我想显示论坛的最新帖子,但我不想显示同一主题两次。我如何修改下面的代码来执行此操作

基本上显示最新帖子,但每个论坛主题/帖子只显示一次。

更改此行

'SELECT'    => 'p.id, p.message, t.subject',

换行

'SELECT'    => 'p.id, p.message, t.subject',


添加一个条件以仅保留主题中最后一篇文章的记录:

WHERE p.id = (
  SELECT pp.id 
  FROM posts AS pp
  WHERE pp.topic_id = t.id ORDER BY pp.posted DESC LIMIT 1
)

添加一个条件以仅保留主题中最后一篇文章的记录:

WHERE p.id = (
  SELECT pp.id 
  FROM posts AS pp
  WHERE pp.topic_id = t.id ORDER BY pp.posted DESC LIMIT 1
)

如果每个主题只需要一个值,可以按主题分组,并从每个主题中选择最近的文章。然后,您可以选择前10个主题

我将用SQL编写,您可以将其转换为PHP:

SELECT p.id, p.message, o.subject
FROM
((SELECT t.id
  FROM posts AS p LEFT JOIN topics AS t ON p.topic_id = t.id
  GROUP BY t.id
  HAVING p.posted = MAX(p.posted) ) ids LEFT JOIN topics AS t ON ids.id = t.id) o
                                        LEFT JOIN posts AS p ON o.id = posts.topic_id
ORDER BY p.posted DESC
LIMIT '0,10'

如果每个主题只需要一个值,可以按主题分组,并从每个主题中选择最近的文章。然后,您可以选择前10个主题

我将用SQL编写,您可以将其转换为PHP:

SELECT p.id, p.message, o.subject
FROM
((SELECT t.id
  FROM posts AS p LEFT JOIN topics AS t ON p.topic_id = t.id
  GROUP BY t.id
  HAVING p.posted = MAX(p.posted) ) ids LEFT JOIN topics AS t ON ids.id = t.id) o
                                        LEFT JOIN posts AS p ON o.id = posts.topic_id
ORDER BY p.posted DESC
LIMIT '0,10'

我不擅长sql,所以我有点困惑这个“where”语句的位置,你能给我完整的sql语句吗?它在连接和排序之间,如下:
'where'=>'p.id=(…),
不幸的是,我不知道php库是如何构造sql语句的,所以上面的语句不起作用。我正在使用PunBB论坛应用程序。我不擅长sql,所以我有点搞不清楚这个“where”语句的位置,你能给我完整的sql语句吗?它在连接和排序之间,如下所示:
'where'=>'p.id=(…),
不幸的是,我不知道php库是如何构造sql语句的,所以上面的方法不起作用。我正在使用PunBB论坛应用程序。看起来您正在使用自定义数据库对象,谁知道您正在使用的自定义数据库对象是如何工作的!在没有看到源代码的情况下,我们无法可靠地告诉您如何修改传递给build_query函数的数组,以便它生成有效的MySQL查询。您将得到关于如何更改查询的响应,但是除非您知道如何更改对象以获得新查询,否则您可能不会在这里得到好的答案。我迷失和困惑;(看起来你正在使用一个自定义数据库对象,谁知道你正在使用的自定义数据库对象是如何工作的呢!如果没有看到相关的源代码,我们就无法可靠地告诉你如何修改传递给build_query函数的数组,以便它生成有效的MySQL查询。你会得到关于如何更改查询的响应,但是如果您不知道如何更改对象以获得新查询,您可能不会在这里得到一个好的答案;(MySQL应该支持它,但这不起作用,因为每个帖子的
p.id
总是不同的。MySQL应该支持它,但这不起作用,因为每个帖子的
p.id
总是不同的。