我有一个消息传送系统(PHP/MYSQL)和I已经制备的字段用于读/未读的简单消息表腓高效地将消息标记为已读
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作为我的前端,我可以做ajax调用php,但我仍然好奇我怎么做我在前端确定用户是否加载并看到消息或不。
任何人都可以看出它应该怎么做?
- Ajax调用更新以在Ajax调用加载成功时读取?
- 在读取数据库时Ajax调用来更新?
- Ajax调用来更新......什么时候?
更新:添加代码。 我的php代码为INSERTING的消息
免责声明:代码工作正常。这是我需要帮助的过程。
$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']);
}
$这 - > updateRead功能包括更新表中读出字段设置为1,以及发送推到原来的收件人,让他们知道该消息被读出。
那么,如果我有1000条消息,我可能最终循环1000次,只是为了将2-3条消息标记为已读,发生了什么。
您的表格结构看起来不太好。 – Phiter
不,在单个查询中没有办法将'SELECT'与'UPDATE'结合起来。 – Barmar
但是听起来像一个准备一次完美的情况,并执行许多 – RiggsFolly