【发布时间】:2011-05-24 17:06:13
【问题描述】:
我有一个问题想问任何有处理 PHP、Jquery 和 SQL 复杂编码经验的人。我意识到我写了很多,但我想详细一点。我有一个我能想到的 1 解决方案的问题,但它似乎效率不高,尤其是在有大量交通。我有一个存储来自用户的消息的表。我正在设计一个聊天平台,用户可以在其中打开聊天框并向其他朋友发送即时消息。
我需要拥有它的能力,所以当用户从他的在线朋友那里打开一个框并发送一条消息时,该朋友将弹出一个带有消息或消息的聊天框,并且该框将从那里更新。我希望该框还可以在用户导航站点直到他关闭该框之前,从一个页面到另一个页面维护先前发送的消息。发生这种情况时,我创建了一个查看列,我可以将当时该框中的所有消息标记为 1。从那时起,这些消息将不会弹出。只有新的会。所以关闭盒子基本上会重置它。
我有一个简单的 JSON 函数,用于发送信息,一个 php 处理程序运行查询并返回所有消息。然后将它们分类到各自的盒子中。
我认为一种解决方案是在 json 代码上设置一个刷新时间间隔,并不断检查viewed=0 的消息。如果有并且该框尚未弹出,它会将消息以 html 格式放入框中。这样做的问题是查询将选择用户收到的所有消息,并且他们将不断覆盖不会在视觉上显示但似乎对系统征税的框。我试图想出一种方法,该方法涉及一个查询,该查询检查时间戳是否大于 jquery 函数中发送的时间戳。 如果有人有任何建议或有用的文章或信息,我将不胜感激。
$.getJSON("../collabrr/chatbox.php?action=view&load=initial&receiver="+username+ "&token="+ token, function(json) {
for(i=0; i < json.length; i++) {
openchat({ data : { user : json[i].user }}); //makes chatbox open up with name of sender
$('#chatbox[data-name="'+json[i].user+'"]>#messagebox').prepend('<div id="chatbox-response">'+json[i].user+':'+json[i].message+'</div>').find('li').fadeIn(1500);
}
});
$sql = 'SELECT timestamp, user, message, receiver
FROM chatbox WHERE receiver=? AND viewed=? ORDER BY timestamp DESC';
$stmt = $conn->prepare($sql);
$result=$stmt->execute(array($_GET['receiver'],0));
}
Field Type Null Key Default Extra
id int(6) NO PRI NULL auto_increment
convo_id varchar(35) NO NULL
timestamp int(11) NO NULL
user varchar(25) NO NULL
receiver varchar(25) NO NULL
message varchar(150) NO NULL
viewed int(1) NO NULL
【问题讨论】: