嘿伙计我有一个查询选择数据和组织但不是正确的顺序。我想要做的是在该周选择用户的所有注释并按每个主题对其进行排序,然后按照各自群集中每个注释的最新时间戳对群集进行排序。我当前的查询选择了正确的数据,但看似随机顺序。有没有人有任何想法?
select * from (
SELECT
topic.topic_title, topic.topic_id
FROM comments
JOIN topic ON topic.topic_id=comments.topic_id
WHERE comments.user='$user' AND comments.timestamp>$week order by comments.timestamp desc) derived_table
group by topic_id
答案 0 :(得分:4)
最终版本,我希望:
SELECT topic_title, topic_id
FROM comments
JOIN topic ON topic.topic_id = comments.topic_id
WHERE comments.user = '$user' AND comments.timestamp > $week
GROUP BY topic_id ORDER BY MAX(timestamp) DESC
MAX(时间戳)将分别应用于每个分组(请参阅http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html)。
答案 1 :(得分:1)
按topic.tropic_title,comments.timestamp
排序答案 2 :(得分:0)
除了其他评论之外,您还需要将ORDER BY topic.topic_title
移出子查询。
答案 3 :(得分:0)
我可能错了,但我不认为您的查询会返回主题的所有评论。由于您按topic_id进行分组,因此会按主题对其进行分组,并且每个主题只返回一行和注释。如果您希望按主题和时间戳排序的每个主题的所有注释,则可以使用此查询。
SELECT topic.topic_title,topic.topic_id,comments.*
FROM comments
JOIN topic ON topic.topic_id=comments.topic_id
WHERE comments.user='$user'
AND comments.timestamp>$week
ORDER by topic.topic_title,comments.timestamp desc
如果您要执行的操作是按主题分组并返回每个主题的最新注释,则可以使用以下查询。查询获取每个主题的最新注释,并为每个主题抓取与最新时间戳匹配的整个注释行。
SELECT latest_ts.topic_title,latest_ts.topic_id,comments.*
FROM comments
JOIN (SELECT topic.topic_title,topic.topic_id,max(comments.timestamp) latest_timestamp
FROM comments
JOIN topic ON topic.topic_id=comments.topic_id
WHERE comments.user=$user
AND comments.timestamp>$week
GROUP BY topic.topic_title,topic.topic_title) latest_ts
ON latest_ts.latest_timestamp = comments.timestamp
AND latest_ts.topic_id = comments.topic_id
ORDER by latest_ts.topic_title
如果给定主题的最后两个注释具有相同的时间戳,则上面的查询可能会返回每个主题两行。如果这是一个问题,你需要做一些额外的工作,将这个输出包装在另一轮分组中,以丢失不需要的行。