mysql中带子查询的多列排序
嘿,伙计们,我有一个查询,可以选择数据并进行组织,但顺序不正确。我想做的是选择一个用户在那一周的所有评论,并按每个主题对其进行排序,然后根据各自集群中每个评论的最新时间戳对集群进行排序。我当前的查询选择了正确的数据,但顺序似乎是随机的。有人有什么想法吗mysql中带子查询的多列排序,mysql,Mysql,嘿,伙计们,我有一个查询,可以选择数据并进行组织,但顺序不正确。我想做的是选择一个用户在那一周的所有评论,并按每个主题对其进行排序,然后根据各自集群中每个评论的最新时间戳对集群进行排序。我当前的查询选择了正确的数据,但顺序似乎是随机的。有人有什么想法吗 select * from ( SELECT topic.topic_title, topic.topic_id FROM comments JOIN topic ON topic.to
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
按topic.tropic_title排序,注释。时间戳按topic.tropic_title排序,注释。时间戳最终版本,我希望:
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(时间戳)将分别应用于每个分组(请参阅)。最终版本,我希望:
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(时间戳)将分别应用于每个分组(请参阅).除了其他注释外,您还需要按主题的顺序将其移出子查询。除了其他注释外,您还需要按主题的顺序将其移出子查询。我可能错了,但我认为您的查询不会返回主题的所有注释。因为您是按主题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
如果给定主题的最后两条注释具有相同的时间戳,则上述查询可能会为每个主题返回两行。如果这是一个问题,您需要做一些额外的工作,将此输出包装到另一轮分组中,以丢失不需要的行。我可能错了,但我认为您的查询不会返回主题的所有注释。因为您是按主题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
如果给定主题的最后两条注释具有相同的时间戳,则上述查询可能会为每个主题返回两行。如果这是一个问题,您需要做一些额外的工作,将此输出包装到另一轮分组中,以丢失不需要的行。PS cluster and sort=group,很抱歉这个愚蠢的标题,当我使用单词groupPS cluster and sort=group时,我在提交时遇到了技术问题,很抱歉这个愚蠢的标题,当我使用groupbtw这个词时,我在提交时遇到了技术问题,orderby子句在groupby子句之后。谢谢你的评论,当我将order by移出子查询时,像这样,groupby topic\u id order by comments.timestamp desc没有像你说的那样更改,我没有得到任何结果。顺便说一句,order by子句位于group by子句之后。感谢您的注释,当我将order by移出子查询时,像这样,group by topic_id order by comments.timestamp desc,甚至没有像您所说的那样更改它,我没有得到任何结果。当我出于某种原因这样做时,我立即没有得到任何结果。当我把它放进去的时候,我得到了想要的结果,但顺序混乱。在另一条评论中,你说你也把
组按主题id
移出了。您应该将其保留在子查询中。这不是ORDER BY条款的一部分。我只是说按主题排序。当我出于某种原因这样做时,我立即没有得到任何结果。当我把它放进去的时候,我得到了想要的结果,但顺序混乱。在另一条评论中,你说你也把组按主题id
移出了。您应该将其保留在子查询中。这不是ORDER BY条款的一部分。我只是说按主题排序。主题标题谢谢你的回复。迈克,首先,我想澄清一下,我想从每个小组的主题表中选择所有主题内容。基本上,我想找到过去一周内发表的所有评论,并按主题对它们进行分组,这样我就可以获得每组的主题信息,从而获得所有最新活动主题的信息。您的查询多次获得其中一个主题的信息。我的原稿获得了正确主题的信息,但顺序不正确。希望这更清楚一点。本质上,我只想获得一周内所有活跃主题的信息,由它们最新评论的时间戳决定。如果我仔细阅读,我会注意到您提到您的查询已经提取了正确的数据,但顺序不正确。记住这一点,理解问题就容易多了。让我知道这个迭代是否有用(我以前从未编辑过这么多答案!;o)非常感谢mike,也感谢文章的参考和解释。你的查询成功了。感谢您的时间++点。再看一次,我意识到您不再需要子查询,所以最后一次编辑…感谢您的回复mike,首先,我想澄清一下,我想从每个组的主题表中选择所有主题内容。基本上,我想找到过去一周内发表的所有评论,并按主题对它们进行分组,这样我就可以获得每组的主题信息,从而获得所有最新活动主题的信息。您的查询多次获得其中一个主题的信息。我的原稿获得了正确主题的信息,但顺序不正确。希望这能更清楚一点,基本上我知道