我正在尝试使用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,
上表显示了如何显示消息。当人们彼此发送消息时,数据将像这样发出。
,当其他用户加入时,以上各行将有所不同。到目前为止,一切都非常好。
我要问的问题是:认为您是用户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;
}
}
请查看屏幕截图,了解我想确切显示的内容:
答案 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;