在mysql中有两个字段的GROUP BY

dom*_*dal 3 mysql group-by

我在mysql中有一个表,它在用户之间存储消息.该表包含以下字段:

ID   from_memberID  to_memberID   message                 Date
+----+--------------+------------+-----------------------+-----------------------+
1         205          207         hello Peter           19/08/2012 20:00:00
2         207          205         Hi frank              19/08/2012 20:01:00
3         205          208         hello Jennifer        19/08/2012 20:10:00
4         207          210         hello Peter           19/08/2012 20:20:00
Run Code Online (Sandbox Code Playgroud)

好吧,假设我想从用户205获得来自每个对话的最后消息

它应该得到寄存器2和3,即用户(205-207)和用户(205-208)之间的对话.事实是我使用GROUP BY from_memberID然后在我的结果中添加了寄存器ID = 1.

这是声明使用:

SELECT *
FROM
(SELECT msg.ID,
    msg.mensaje,
    msg.from_miembroID,
    msg.fecha,
    msg.read,
    FROM mensajes as msg
    INNER JOIN miembros as mem ON mem.ID=IF(msg.from_miembroID=205, msg.to_miembroID, msg.from_miembroID)
WHERE msg.to_miembroID=205 OR msg.from_miembroID=205
ORDER BY msg.fecha DESC) as temp
GROUP BY from_miembroID
Run Code Online (Sandbox Code Playgroud)

我如何使用GROUP BY将两列(from_memberID,to_memberID)视为一个?

提前致谢.

Ste*_*tei 8

您可以使用新的自定义字段,通过自定义规则对ids(from_memberID,to_memberID)进行排序,例如,较小的一个始终排在第一位.

例如:

SELECT 
     IF(from_memberID < to_memberID, 
         CONCAT(from_memberID, '-', to_memberID),
         CONCAT(to_memberID, '-', from_memberID)
     ) as conversation_ids
FROM `messages`
Run Code Online (Sandbox Code Playgroud)

该字段将返回唯一组合,例如205-207,无论205发送消息到207还是207发送消息到207.

最后,您可以按此值进行分组并获得唯一组合.