如果两个用户相互发送了6条消息,则删除5条消息

时间:2017-11-14 02:05:29

标签: codeigniter mysqli

如果有任何用户向其他用户发送了6条消息并显示第6条消息,我想从表中按升序删除5条消息。例如,如果 Tapy Nomi 发送了6条消息,则前5条消息将按升序删除,并显示第6条消息。 我已经计算了已发送的邮件数,但无法找到删除前5条邮件的方法。

表名:

  1. t_chat_msg
  2. 数据库中的字段为:

    1. chat_msg_id
    2. 消息
    3. from_user_email
    4. to_user_email
    5. 时间戳
    6. 这是模型

      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);
      }
      

1 个答案:

答案 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它应该可以正常使用。