【问题标题】:MySQL: Multiple Group By With Desc Order IssueMySQL:多个 Group By 与 Desc 顺序问题
【发布时间】:2016-09-06 06:55:08
【问题描述】:

我已经为 Single Group By 访问了 MySQL order by before group by,它工作正常。我有 2 个按列分组的问题。

我有一个名为“消息”的下表。消息是用户帖子的集合

id | posts_id | from_user_id | to_user_id | message_description | created_at
-----------------------------------------------------------------------------
1      1           1              2             test1             2016-09-06 10:00:00
2      1           1              2             test2             2016-09-06 11:00:00
3      1           4              2             test3             2016-09-06 09:00:00
4      1           4              2             test4             2016-09-06 15:00:00
5      2           1              2             test1             2016-09-06 10:00:00
6      2           1              2             test2             2016-09-06 11:00:00
7      2           4              2             test3             2016-09-06 09:00:00
8      2           4              2             test4             2016-09-06 15:00:00

查询的结果输出应该是

id | posts_id | from_user_id | to_user_id | message_description | created_at
-----------------------------------------------------------------------------
2      1           1              2             test2             2016-09-06 11:00:00
4      1           4              2             test4             2016-09-06 15:00:00
6      2           1              2             test2             2016-09-06 11:00:00
8      2           4              2             test4             2016-09-06 15:00:00

我正在尝试检索帖子和用户的最新消息。

我在下面给出了尝试,但它没有以正确的顺序给出结果。

SELECT *
FROM messages
WHERE to_user_id = '2'
GROUP BY posts_id DESC,
         from_user_id
ORDER BY id DESC

【问题讨论】:

  • @Strawberry 我已经访问了那个帖子。但它仅适用于单个分组,我必须以这种方式使用 2 个分组列无法得到答案
  • 嗯。我认为这根本不是一个 group by/order by 问题,因为要求似乎是获取每个 from_user_id 的最后一个条目。试试这个 SELECT t1.* FROM messages t1 WHERE t1.id = (select max(id) from messages t2 where t2.posts_id = t1.posts_id and t2.from_user_id = t1.from_user_id)
  • 您有 3 个用户,但您似乎只想返回与其中一个用户(用户 2)相关的消息
  • 非常感谢@P.Salmon 这是我正在寻找的答案。解决了:)
  • @Strawberry 还是重复的??

标签: mysql group-by sql-order-by


【解决方案1】:

这个问题与 SO 上发布的数千个其他问题相同。如手册中所述,最佳解决方案是非关联子查询,例如:

SELECT x.* 
  FROM my_table x 
  JOIN 
     ( SELECT MAX(id) id 
         FROM my_table 
        WHERE to_user_id = 2 -- OPTIONAL
        GROUP 
           BY from_user_id
     ) y 
    ON y.id = x.id;

【讨论】:

  • 在哪里使用posts_id??它给出错误未知列'y.id'
  • 这里不需要帖子ID,但我已经添加了to_user_id。
  • 我认为这是必需的。请检查“消息”表数据的更新问题,并且仍然给出“y.id 上的未知列”错误
  • 我明白了。您想要每个用户、每个帖子的最新消息。你的原始数据集中只有一篇文章,所以不是很清楚。无论如何,这是一个微不足道的改变......
  • 是的。消息应该是每个帖子用户明智的。因此,对于一个帖子,我会收到不同的用户信息。
猜你喜欢
  • 1970-01-01
  • 2020-03-09
  • 2013-09-20
  • 1970-01-01
  • 2011-11-10
  • 2018-06-06
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多