繁体   English   中英

如何在 mysql 中按两列分组

[英]How to group by two columns in mysql

我正在建立一个聊天网站,我有一个包含以下列的表, from_idto_idmessages

from_id是聊天来自的用户的idto_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_idto_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM