MySQL – 如何显示每个线程的最新主题

我正在尝试创建SQL以检索论坛帖子的最新帖子列表.
我有以下代码:

SELECT
 item_discuss_thread_id
 , item_discuss_post_title
 , COUNT(item_discuss_thread_id) AS nb_posts
FROM
 item_discuss_posts
GROUP BY
 item_discuss_thread_id

显然,如果帖子是最新的,这将是一个不分组的群体. item_discuss_post_title将获取组中的第一行.

我想知道这有什么办法吗?如果没有,解决问题的最佳方法是什么……只有子查询?

谢谢,
帕维尔

更新:
请注意我需要所有线程,LIMIT 1没有解决问题.
ORDER BY也不是一个选项,因为GROUP BY无论如何都会从组中选择第一条记录.
这似乎不是一个简单的问题.

更新:

我真的想避免使用子查询,或者如果这样做 – 使用最佳可能.
我目前带来的是这样的:

SELECT
  ordered_by_date.item_discuss_thread_id
  , item_discuss_post_title
  , COUNT(item_discuss_thread_id) AS nb_posts
FROM
  (
   SELECT
     item_discuss_thread_id
     , item_discuss_post_title
   FROM
      item_discuss_posts
   ORDER BY
      item_discuss_post_datetime DESC
  ) AS ordered_by_date
GROUP BY
   item_discuss_thread_id

EXPLAIN EXTENDED提供以下结果:

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, PRIMARY, <derived2>, ALL, \N, \N, \N, \N, 20, Using temporary; Using filesort
2, DERIVED, item_discuss_posts, index, \N, item_discuss_post_datetime, 8, \N, 20, 

解决方法:

尝试这个.

SELECT
  *
FROM
  (SELECT item_discuss_thread_id, item_discuss_post_title, COUNT(item_discuss_thread_id) AS nb_posts
   FROM item_discuss_posts
   ORDER BY __datecolumn__)
  AS ordered_by_date
GROUP BY
  ordered_by_date.item_discuss_thread_id

将__datecolumn__替换为存储发布时间的列.

上一篇:如何加载测试PHP Web论坛软件?


下一篇:【S交换机技术连载】