一个查询中的会话用户列表

时间:2018-08-15 07:45:23

标签: php mysql sql

我正在尝试使用php,mysql和ajax创建聊天系统。但是我需要您提供有关某个主题的帮助。

简而言之,我将尝试告诉您我该如何做。

我从数据库中创建了一个表,名称为 chat_conversations ,表行为

  `message_id` int(11) NOT NULL AUTO_INCREMENT,
  `from_user_id` int(11) DEFAULT NULL,
  `to_user_id` int(11) DEFAULT NULL,
  `message_text` varchar(5000) CHARACTER SET utf8 DEFAULT NULL,
  `message_created_time` varchar(11) NOT NULL DEFAULT '1524910573',
  `seen` enum('0','1') NOT NULL DEFAULT '0',
  `message_type` varchar(8) DEFAULT NULL,
  `user_ip` varchar(45) DEFAULT NULL,

上表显示了如何显示消息。当人们彼此发送消息时,数据将像这样发出。

enter image description here

,当其他用户加入时,以上各行将有所不同。到目前为止,一切都非常好。

我要问的问题是:认为您是用户ID为2的用户。您想查看与您聊天的所有人员的列表。你是怎么做到的。我的意思是说我不了解如何发现它。因为您将收到一封包含to_user_id 3或其他to_user_id (4,2,9,12,45, ... ext.)

的消息

如何发掘聊天联系人列表。如何编写查询。

public function ChatUserList($logedInUserID){
    $logedInUserID = mysqli_real_escape_string($this->db, $logedInUserID);
    $ChatUserList = mysqli_query($this->db," how do i write a sql query WHERE from_user_id = '$logedInUserID' ") or die(mysqli_error($this->db));
    while($row=mysqli_fetch_array($ChatUserList)) {
        // Store the result into array
        $data[]=$row;
     }
     if(!empty($data)) {
        // Store the result into array
        return $data;
     }  
}

请查看屏幕截图,了解我想确切显示的内容:

enter image description here

2 个答案:

答案 0 :(得分:1)

我相信您将能够编写如下内容:

SELECT DISTINCT m.to_user_id, u.name FROM messages m
INNER JOIN users u ON u.id = m.to_user_id
WHERE m.from_user_id = '$logedInUserID'.

这应该列出存在对话的所有用户ID。

答案 1 :(得分:1)

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(message_id SERIAL PRIMARY KEY
,from_user_id int NOT NULL 
,to_user_id INT NOT NULL
);

INSERT INTO my_table (from_user_id,to_user_id) VALUES
(1,3),(2,1),(2,3),(3,2),(2,5),(7,2),(6,4),(1,6),(2,5),(5,2),(5,2);

SELECT DISTINCT from_user_id chats FROM my_table WHERE to_user_id = 2
UNION
SELECT to_user_id FROM my_table WHERE from_user_id = 2;

+-------+
| chats |
+-------+
|     3 |
|     7 |
|     5 |
|     1 |
+-------+

编辑:

从下面的评论看来,您可能正在追求这样的(未经测试的)...

SELECT DISTINCT from_user_id chats
     , type 'from_user' 
  FROM my_table 
 WHERE to_user_id = 2
UNION
SELECT to_user_id
     , 'to_user' 
  FROM my_table 
 WHERE from_user_id = 2;
相关问题