I am trying to create SQL for retrieveing a list of latests posts for the forum thread.
I have the following code:
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
Obviously this will group without the respect of if the post is latest or not. item_discuss_post_title will just get the first row in the group.
I wonder if there’s some way around this? If not, what is the best way to solve the problem… only subqueries?
Thanks,
Pavel
UPDATE:
Please note that I need all threads, LIMIT 1 is not solving the problem.
Also ORDER BY is not an option as GROUP BY will select the first record from group anyway.
This is not such a simple question as it can seem to be.
UPDATE:
I really want to try to avoid using subqueries or if doing so – use it the optimal may.
What I came with currently is something like this:
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 gives the following result:
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,
Try this.
Replace
__datecolumn__with the column that stores posting time.