有点复杂的MySQL语句

有点复杂的MySQL语句,mysql,sql,aggregate-functions,Mysql,Sql,Aggregate Functions,我正在创建一个论坛,但在创建一个显示给定论坛所有主题的页面时遇到了困难。三个相关表格和字段的结构如下: Table: forums_topics Table: forums_posts Table: users -------------------- ------------------- ------------ int id int id int id int forum_id

我正在创建一个论坛,但在创建一个显示给定论坛所有主题的页面时遇到了困难。三个相关表格和字段的结构如下:

Table: forums_topics    Table: forums_posts    Table: users
--------------------    -------------------    ------------
int id                  int id                 int id
int forum_id            int topic_id           varchar name
int creator             int poster
tinyint sticky          varchar subject
                        timestamp posted_on
我从以下SQL开始:

   SELECT t.id, 
          t.sticky, 
          u.name AS creator, 
          p.subject, 
          COUNT(p.id) AS posts,
          MAX(p.posted_on) AS last_post
     FROM forums_topics AS t
     JOIN users AS u
LEFT JOIN forums_posts AS p ON p.topic_id = t.id
    WHERE t.forum_id = 1 
      AND u.id = t.creator
 GROUP BY t.id
 ORDER BY t.sticky
这似乎让我得到了我想要的东西(主题的id号,如果是粘性的,那么是谁做的主题,主题的主题,每个主题的帖子数量,以及最新帖子的时间戳)。如果有错误,请告诉我


我现在遇到的问题是如何添加到这张海报上,以获得最新海报的名称。有人能解释一下我将如何编辑SQL来做到这一点吗?如果需要的话,我可以提供更多的细节,如果这样可以简化的话,我也可以重组我的表格。

这里有一个简单的方法:

SELECT t.id, 
      t.sticky, 
      u.name AS creator, 
      p.subject, 
      COUNT(p.id) AS posts,
      MAX(p.posted_on) AS last_post,
      (SELECT name FROM users 
       JOIN forums_posts ON forums_posts.poster = users.id 
       WHERE forums_posts.id = MAX(p.id)) AS LastPoster
 FROM forums_topics AS t
 JOIN users AS u
LEFT JOIN forums_posts AS p ON p.topic_id = t.id
WHERE t.forum_id = 1 
  AND u.id = t.creator
GROUP BY t.id
ORDER BY t.sticky

基本上,您可以根据最大id进行子查询以查找用户。如果您的id是GUID或由于其他原因不符合顺序,您可以根据发布的时间戳进行查找。

这似乎可以做到这一点,非常感谢!当我在这里闲逛的时候,我也发现加入同一张桌子两次很有趣。这很有效,所以我将使用它并继续前进,但我会记下一条记录,回来重新查看它,看看是否可以在没有子选择的情况下完成它。