【发布时间】:2014-11-07 22:56:13
【问题描述】:
我正在编写一个简单的聊天服务。我想挑选两个人之间的消息线程,只有一个发送者和一个接收者使用他们的用户名或用户 ID。我在下面有我的查询。它有一个小问题,正在返回两次消息。我该如何解决这个问题?
例如,如果我的发件人有 uid '101' 而我的收件人有用户名'janed',我的查询是
SELECT * FROM chat LEFT JOIN users ON sender=uid OR receiver=uid WHERE username='janed' OR (sender='101' AND receiver='janed') OR (sender='janed' AND receiver='101') ORDER BY msg_id ASC
用户表
---------------------------------
uid |fname |mname |username |
---------------------------------
101 |John |Doe |jdoe |
---------------------------------
102 |Jane |Doe |janed |
---------------------------------
103 |Ann |Other |aother |
---------------------------------
聊天表
---------------------------------------------
msg_id |sender |receiver |content |
---------------------------------------------
1 |101 |102 | Hello Jane |
---------------------------------------------
2 |102 |101 | Hello John |
---------------------------------------------
3 |103 |101 | Hi John |
---------------------------------------------
【问题讨论】:
-
总的来说,我认为您可以通过 group by 解决您的问题。但是,您可能应该只查询发送方/接收方,因为拥有所有这些 OR 子句有点笨拙。