我正在尝试创建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,
答案 0 :(得分:2)
好的,我自己带来了解决方案。我使用了一个从属子查询来解决。 这就是我在结果中所拥有的:
SELECT
item_discuss_threads.item_discuss_thread_id
, item_discuss_threads.item_discuss_thread_datetime
, item_discuss_threads.item_discuss_thread_title
, latest_posts.item_discuss_post_title
, latest_posts.item_discuss_post_datetime
, COUNT(item_discuss_posts.item_discuss_post_id) AS nb_posts
FROM
item_discuss_threads
INNER JOIN item_discuss_posts
ON item_discuss_threads.item_discuss_thread_id=item_discuss_posts.item_discuss_thread_id
INNER JOIN item_discuss_posts AS latest_posts
ON latest_posts.item_discuss_thread_id=item_discuss_threads.item_discuss_thread_id
WHERE
(
SELECT
item_discuss_post_id
FROM
item_discuss_posts AS p
WHERE
p.item_discuss_thread_id=item_discuss_posts.item_discuss_thread_id
ORDER BY
item_discuss_post_datetime DESC
LIMIT
1
)=latest_posts.item_discuss_post_id
GROUP BY
item_discuss_threads.item_discuss_thread_id
ORDER BY
latest_posts.item_discuss_post_datetime DESC
答案 1 :(得分:1)
试试这个。
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__
替换为存储发布时间的列。