0

我有一个mysql表聊天,比如

+---------+-----------+-------------+----------------+
| chat_id | sender_id | receiver_id | msg            |
+---------+-----------+-------------+----------------+
|       1 |      1002 |        1001 | test           |
|       2 |      1001 |        1002 | test           |
|       3 |      1002 |        1001 | test           |
|       5 |      1001 |        1002 | asdf           |
|       6 |      1003 |        1001 | tesdf          |
|       9 |      1001 |        1003 | tasdfa a fasd  |
|      10 |      1001 |        1004 | dsf asdf a     |
|      11 |      1005 |        1001 | dsf asdf asdf  |
+---------+-----------+-------------+----------------+

用户1002,1003,1004,1005之间有用户1001的会话

我需要与用户 1001 进行对话的用户列表(1002,1003,1004,1005)。

什么是mysql查询?请帮我。

4

5 回答 5

5

您可以选择要搜索的特定用户在 asender或中的所有记录receiver。之后测试发送者的 id 是否等于您要搜索的用户 ID,如果相等则返回接收者的 id,否则返回发送者。提供DISTINCT关键字以仅在结果列表中显示唯一 ID。

SELECT  DISTINCT 
        CASE WHEN sender_id = 1001 
            THEN receiver_id 
            ELSE sender_id 
        END userID
FROM    tableName
WHERE   1001 IN (sender_id, receiver_id)

因为您想根据您的评论连接该行

SELECT  GROUP_CONCAT(DISTINCT
                    CASE WHEN sender_id = 1001 
                        THEN receiver_id 
                        ELSE sender_id 
                    END) userID
FROM    tableName
WHERE   1001 IN (sender_id, receiver_id)
于 2013-09-12T09:10:27.873 回答
3

试试这个

select  DISTINCT if(receiver_id='1001',sender_id,receiver_id) AS id
from    YourTable
where   (sender_id = 1001 OR receiver_id = 1001)

编辑:

SELECT GROUP_CONCAT( DISTINCT (
if( receiver_id = '1001', sender_id, receiver_id ) )
) AS concat
FROM chat
WHERE (
sender_id =1001
OR receiver_id =1001
)

我认为您知道 GROUP_CONCAT 大小问题。你可以参考这个http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

于 2013-09-12T09:22:15.180 回答
1

您可以使用 aunion组合发送者或接收者为 1001 的两个查询:

select  distinct sender_id
from    YourTable
where   receiver_id = 1001
union
select  distinct receiver_id
from    YourTable
where   sender_id = 1001
于 2013-09-12T09:10:19.297 回答
0
(select distinct receiver_id from table where sender_id = 1001)
union distinct
(select distinct sender_id from table where receiver_id = 1001);
于 2013-09-12T11:44:08.073 回答
0

嗨,请检查以下查询

从不同的 sender_id = 1001 的表中选择不同的 receiver_id

于 2013-09-12T09:48:37.647 回答