Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中带子查询的多列排序_Mysql - Fatal编程技术网

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,首先,我想澄清一下,我想从每个组的主题表中选择所有主题内容。基本上,我想找到过去一周内发表的所有评论,并按主题对它们进行分组,这样我就可以获得每组的主题信息,从而获得所有最新活动主题的信息。您的查询多次获得其中一个主题的信息。我的原稿获得了正确主题的信息,但顺序不正确。希望这能更清楚一点,基本上我知道