聊天mySQL表,选择语句查找唯一对话



我有一个聊天消息表:

id,nToUserID,nFromUserID,strMessage

我正在尝试查找两个用户之间唯一出现的消息。不是所有的消息,只是,至少有一条消息发给用户或来自用户。我会用它来显示一个"对话"列表,然后点击它可以查看完整的聊天线程。

我尝试使用DISTINCT选择,但似乎仍然可以在同一用户之间提供多条记录。

我考虑了一个左JOIN,但它似乎再次给了我多个或空的记录。

如果我理解正确,您可以使用least()greatest():

select distinct least(nToUserID, nFromUserID), greatest(nToUserID, nFromUserID)
from t;

如果您想要其他用户,请使用:

select distinct (case when nToUserID = ? then nFromUserID else nToUserID end) as userID
from t
where ? in (nToUserID, nFromUserID);

?是要连接到的用户的id。

您可以使用count函数来获取唯一的id对及其各自的会话数。

SELECT nFromUserId, nToUserId, count(id) FROM `table` GROUP BY nFromUserId, nToUserId

尽管如果您需要交替计算nFromUserId和nToUserId,这是不起作用的。