我在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)视为一个?
提前致谢.
您可以使用新的自定义字段,通过自定义规则对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.
最后,您可以按此值进行分组并获得唯一组合.
| 归档时间: |
|
| 查看次数: |
4388 次 |
| 最近记录: |