gpt4 book ai didi

javascript - mySQL查询在相同条件下检索数据不同

转载 作者:行者123 更新时间:2023-11-29 10:33:21 24 4
gpt4 key购买 nike

我在 Node-JS 和 Socket.io 中使用 MySQL 数据库制作了一个聊天应用程序。我已经完成了一切,但陷入了一件我无法解决的事情。当用户登录其帐户时,他们会被重定向到收件箱,然后显示与他聊天的用户列表。例如,当前登录的用户是 John,当 John 点击 Doe 时,他与一个名为 Doe 的人聊天> 从列表中的名称打开聊天,此时所有消息都会从数据库中检索。数据作为对象数组存储在变量data中。我在代码中所做的就是循环访问此数据并将每条消息附加到聊天框。显示所有消息的地方。每条消息都有两个类别Message ToMessage From。这些类别是为了区分谁给谁发短信。然后我更改这些消息的背景颜色。从我这边发送的消息将具有灰色背景,向我发送消息的人将具有蓝色背景。

现在我面临的基本问题是,当From MessagesTo Messages的长度小于13时,就会显示聊天按顺序排列,并且每条消息都位于正确的位置。但是,当上述任何消息的长度超过 13 时,会发生的情况是,首先显示我发送的消息,然后显示向我发送消息的用户。

来自的消息和消息的长度小于 13,所以现在可以了

enter image description here

当长度超过 13 时,首先显示我的消息

enter image description here

然后显示发送给我的用户

enter image description here

数据格式

enter image description here

显示聊天的脚本

var ac_user = data.active_user;
socket.on("get_ret_messages",(data)=>{
while (chatBody.hasChildNodes()) { chatBody.removeChild(chatBody.firstChild); }

for(let i = 0; i<data.length;i++){
if(data[i].mess_to == ac_user){
mess = '<div class="bubble you">'+data[i].mess_txt+'<br><span class="time">'+data[i].mess_time+'</span></div>';
chatBody.insertAdjacentHTML("beforeend",mess);
}
else{
mess = '<div class="bubble me">'+data[i].mess_txt+'<br><span class="time">'+data[i].mess_time+'</span></div>';
chatBody.insertAdjacentHTML("beforeend",mess);
}
}

chatBody.scrollTop = chatBody.scrollHeight;

});

查询

socket.on("get_user_messages",(data)=>{
var GET_CLICKED_USER_MESS = "SELECT mess_txt,mess_time,mess_to FROM (select mess_to as user_id,mess_txt,mess_time,mess_id,mess_to from messages where mess_from = '"+data.active+"' AND mess_to='"+data.clicked+"' UNION select mess_to as user_id,mess_txt,mess_time,mess_id,mess_to from messages where mess_from = '"+data.clicked+"' AND mess_to='"+data.active+"' ORDER BY mess_id ASC) sq join users on users.id = sq.user_id";
con.query(GET_CLICKED_USER_MESS,(err,res)=>{
if(err) throw err;
socket.emit("get_ret_messages",res);
})
});

I am quite sure that the problem can be in the query, but I don't know what is that.

最佳答案

稍微解释一下:ORDER BY必须放在最后才有效,否则它只会对子查询进行排序,并且顺序可能被加入

查询:

"SELECT mess_txt,mess_time,mess_to FROM (SELECT mess_to AS user_id,mess_txt,mess_time,mess_id,mess_to FROM messages WHERE mess_from = '"+data.active+"' AND mess_to='"+data.clicked+"' UNION SELECT mess_to as user_id,mess_txt,mess_time,mess_id,mess_to FROM messages WHERE mess_from = '"+data.clicked+"' AND mess_to='"+data.active+"') sq JOIN users ON users.id = sq.user_id ORDER BY mess_time ASC"

关于javascript - mySQL查询在相同条件下检索数据不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46969845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com