如何仅自动从MySql仅获取新行?

问题描述

我正在为我的用户提供消息传递服务。我使用AJAX发送消息而不刷新消息。我想自动从数据库中获取新行(如果当前用户或另一位用户输入了任何消息),而无需刷新旧消息。

<div id="readmsg">
#The messages is to be read  here....
</div>

<textarea placeholder="Write your message.." id="msg"></textarea>
<input type="submit" value="Send" id="sendmsg">


<?php $user1 = 1; $user2 = 2; ?>
<script type="text/javascript">
  $(document).ready(function(){
    $("#sendmsg").on("click",function(e){
      e.preventDefault();
      var usera = <?php echo $user1.";";?>
      var userb = <?php echo $user2.";";?>
      var msg = $("#msg").val();
      $.ajax({
        url : "sendmessageprocess.php",type : "POST",data : {message:msg,user1:usera,user2:userb},success : function(data){
          document.getElementById("msg").value="";
          $("#msg").val("");
        }
      });
    })
  });
</script>

解决方法

正如我在评论中看到的,朋友们只会使您的问题变得复杂,而与您的主要问题相去甚远

过去作为聊天室创建者,我会认真地建议您使用其他技术代替ajax

但是,如果有必要使用ajax,解决问题的最佳方法是:

在查询中获取新消息后,将最后一行ID放入会话或cookie中的某个索引中,例如:

$_SESSION['last_msg_id'] = $row['id'];

并在另一个请求中获得消息,其ID大于您的last_msg_id

$query = 'SELECT * FROM `messages` WHERE `id` > "' . $_SESSION['last_msg_id'] . '"';

,例如,对于没有您的会话索引的新客户,例如,获取最近的10条消息,并以告知的方式创建您的会话索引。例如:

if(isset($_SESSION['last_msg_id'])){
    $query = 'SELECT * FROM `messages` WHERE `id` > "' . $_SESSION['last_msg_id'] . '"';
}else{
    $query = 'SELECT * FROM `messages` ORDER BY `id` ASC LIMIT 10';
}
// your query process
$rows = {your rows};
foreach($rows as $row){
    $_SESSION['last_msg_id'] = $row['id'];
}

// or

$rows = {your rows};
$last_row = end($row);
$_SESSION['last_msg_id'] = $last_row['id']

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...