如果有任何用户向其他用户发送了6条消息并显示第6条消息,我想从表中按升序删除5条消息。例如,如果 Tapy 向 Nomi 发送了6条消息,则前5条消息将按升序删除,并显示第6条消息。 我已经计算了已发送的邮件数,但无法找到删除前5条邮件的方法。
表名:
数据库中的字段为:
这是模型
function deletemessages($data)
{
$this->db->select('message as receiver,timestamp');
$this->db->from('t_chat_msg');
$this->db->where('from_user_email', $data['fromuser']);
$this->db->where('to_user_email', $data['touser']);
$this->db->order_by("timestamp", "asc");
$num=$this->db->count_all_results();
return $num;
}
这是控制器
public function deletemessage()
{
$data = json_decode(file_get_contents('php://input'));
$touser = $data->{'touser'};
$fromuser = $data->{'fromuser'};
$data = array('touser' => $touser,
'fromuser' =>$fromuser);
$status=$this->um->deletemessage($data);
echo json_encode($status);
}
答案 0 :(得分:0)
获取一个用户发送给另一个使用查询的总消息量
SELECT COUNT(*) AS K FROM t_chat_msg WHERE touser='$touser' AND fromuser='$fromuser'
然后您有总信息数,您可以使用查询
删除旧邮件,留下所需数量的邮件DELETE FROM t_chat_msg ORDER BY timestamp ASC LIMIT $limit
如果一切功能
// $amt - amount of messages to keep
// $fromuser - message sender
// $touser - message recipient
function delete_old($amt,$fromuser,$touser)
{
$ma=mysqli_fetch_assoc(mysqli_query($db,"SELECT COUNT(*) AS K FROM t_chat_msg WHERE touser='$touser' AND fromuser='$fromuser'"));
$limit=$ma['K']-$amt;
mysqli_query($db,"DELETE FROM t_chat_msg ORDER BY timestamp ASC LIMIT $limit");
}
对于codeigniter应该像这样工作
// $amt - amount of messages to keep
// $fromuser - message sender
// $touser - message recipient
function delete_old($amt,$fromuser,$touser)
{
$limit=$this->db->query("SELECT COUNT(*) FROM t_chat_msg WHERE touser='$touser' AND fromuser='$fromuser'")->row()-$amt;
$this->db->query("DELETE FROM t_chat_msg ORDER BY timestamp ASC LIMIT $limit");
}
我没有使用它,但基于this它应该可以正常使用。