[英]How to group by two columns in mysql
我正在建立一个聊天网站,我有一个包含以下列的表, from_id
, to_id
, messages
。
from_id
是聊天来自的用户的id
, to_id
是聊天发送到的用户的id
。
现在我想获取所有聊天记录,但我也想以这样的方式对它进行分组,如果to_id
是我的 id,它将按from_id
,如果from_id
是我的用户 id,那么它将按to_id
,我试过这个SELECT * FROM chats WHERE from_id=:me || to_id=:me GROUP BY from_id, to_id
SELECT * FROM chats WHERE from_id=:me || to_id=:me GROUP BY from_id, to_id
但它只在from_id
和to_id
相同时将其分组,我怎么也可以让它 go 反过来呢
聚合通常用于获取多行并将它们压缩为单行。 这似乎不是你的本意
听起来您有排序问题,而不是聚合问题。 如果您想按“其他”ID 对聊天进行排序,您可以使用:
select c.*
from chats c
where :me in (to_id, from_id)
order by (case when :me = to_id then from_id else to_id end);
您可以使用CASE
表达式来做到这一点:
SELECT CASE WHEN from_id = :me THEN to_id ELSE from_id END id,
GROUP_CONCAT(messages) messages -- I added this as an aggregate function
FROM chats
WHERE :me IN (from_id, to_id)
GROUP BY id
但是如果你不需要任何聚合,那么你不应该使用GROUP BY
,而是DISTINCT
:
SELECT DISTINCT CASE WHEN from_id = :me THEN to_id ELSE from_id END id
FROM chats
WHERE :me IN (from_id, to_id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.