【问题标题】:Group by more combinations按更多组合分组
【发布时间】:2015-04-11 14:51:27
【问题描述】:

我有下表来表示用户之间的对话。

message | user1 | user2 | unixtime
msg1    | 14    | 21    | -
msg2    | 21    | 12    | -
msg1    | 14    | 18    | -
msg3    | 14    | 21    | -
msg2    | 18    | 14    | -
msg4    | 21    | 12    | -

我想通过选择 current_user = user1 或 user2 的所有消息来显示特定用户的对话列表。 到目前为止,此 SELECT 将选择正确的消息,但分组无法正常工作。

SELECT * FROM (
    SELECT * FROM messages
    WHERE user1 = '".$_SESSION['login']['ID']."'
    OR user2 = '".$_SESSION['login']['ID']."'
    ORDER BY unixtime DESC
) as list
GROUP BY user1, user2
ORDER BY unixtime DESC

它只会将具有相同 user1 和 user2 的消息分组,如果两个用户颠倒则不会。 这是通过更高级的分组完成的还是我应该以某种方式加入表格?

【问题讨论】:

  • 您可以按 LEAST(user1, user2), GREATEST(user1, user2) 分组,但您想做什么?您正在选择所有列 * 并仅按两列分组

标签: php mysql group-by


【解决方案1】:

不清楚您希望查询做什么,因为您使用的是group byselect *select * 从匹配的行返回不确定的值。我不知道为什么有人愿意这样做。您可以在documentation 中了解此内容。

如果要统计消息数:

SELECT least(user1, user2), greatest(user1, user2), count(*)
FROM messages
WHERE '".$_SESSION['login']['ID']."' in (user1, user2)
GROUP BY least(user1, user2), greatest(user1, user2)

【讨论】:

  • 将 minimum(user1, user2), best(user1, user2) 添加到我的 GROUP BY 完成了这项工作 - 谢谢!我想显示所有消息,这就是为什么 * 但也许我应该重新审视一下
猜你喜欢
  • 2018-10-21
  • 1970-01-01
  • 2019-06-28
  • 2016-12-06
  • 2015-11-18
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多