【发布时间】:2016-11-24 10:50:37
【问题描述】:
我有一个消息传递系统 (PHP/MYSQL),并且我已经准备好简单消息表中的已读/未读字段
Table
- msgbody
- datetime
- receipent
- read/unread
- sent/unsent (this field is for sending of notification)
我有 2 个问题
-
我明白当用户创建消息时,我将插入表中,字段为未读,并且当我第一次使用以下语句检索消息时
MYSQL statement: Select * from table WHERE receipient = "a";
我所做的是遍历数组,然后将未读字段设置为使用多个插入语句读取(非常低效!)
我是否可以在选择时放弃数组循环并更新字段?
这是判断消息是否被阅读的正确方法吗?
2) 我使用 jquery 作为我的前端,我可以对 php 进行 ajax 调用,但我仍然很好奇如何在前端确定用户是否加载并看到了消息.
任何人都可以阐明应该如何完成?
- 当 Ajax 调用加载成功时,Ajax 调用更新以读取?
- 读取数据库时调用 Ajax 进行更新?
- Ajax 调用更新......什么时候?
更新:添加代码。 我用于插入消息的 php 代码
免责声明:代码运行良好。这是我需要帮助的过程。
$query = $this->db->prepare('INSERT INTO table (msgbody,date time,recipient,read,sent) VALUES(:msg,:date,:user,:read,:sent);
if ($query->execute(array(
':msg' => $msg,
':date' => $datetime,
':user' => $user,
':read' => '0',
':sent' => '0'))) {
return TRUE;
}
My php code for retrieving of message
$query = $this->db->prepare('SELECT * FROM table WHERE recipient = :user);
if ($query->execute(array(
':user' => $user
))){
$data = $query->fetchAll();
foreach ($data as $msg) {
if $msg['read'] == '0';
$this->updateRead($msg['id']);
}
$this->updateRead 函数包括将表读取字段更新为 1,以及将 Pusher 发送给原始收件人,以便他们知道消息已被读取。
如果我有 1000 条消息,我最终可能会循环 1000 次以将 2-3 条消息标记为已读。
【问题讨论】:
-
你的表结构看起来不太好。
-
不,没有办法将
SELECT与UPDATE组合在一个查询中。 -
但听起来像是一次准备并执行多次的完美情况
-
-
对不起,我正在添加代码,现在已经启用。
标签: javascript php jquery messaging