添加较旧的帖子会重复返回的记录

时间:2017-03-03 12:45:47

标签: php sql json ajax mysqli

所以我正在为用户创建一个Feed,并且我试图获得比在页面加载时调用的前两个帖子更旧的内容。向下滚动时,我用下面的代码得到的是一遍又一遍地重复前两个结果的记录。我需要做的就是附加任何比last_id更旧的数据,我通过Json完美地完成了这些数据。

我还需要DESC LIMIT但是当我将DESC LIMIT $ last_id添加到我的查询中时,我根本没有得到任何JSON响应数据,所以我不得不把它拿出来。

AJAX功能

抓住last_id并将其发送回我的php页面,以便第一次滚动时$ _POST ['last_id']将从0更新为最后插入的记录。 - 经过测试

    <script>
    var last_id = 0;
    function loadAll () {
    $.ajax({
    url: 'commentedoncontent.php',
    type: 'POST',
    dataType: 'JSON',
    data: { last_id: last_id},
    success: function(data) {
    $.each(data.posts, function(i, response) {
    });
    last_id = data.last_id;
    }
    })
    }
    </cript>

PHP

我的最后一个身份是通过json罚款。然而,我不知道这方面发生了什么。我需要DESC顺序的结果,并尝试添加DESC LIMIT $ last_id,我的Feed完全消失,没有返回json数组

     $last_id=(isset($_POST['last_id']) && $_POST['last_id'] > 1)
     ? $last_id = $_POST['last_id'] : $last_id = 0;
     $user1_id=$_SESSION['id'];
     $query = "SELECT *
     FROM streamdata m
     INNER JOIN streamdata_feedback t1 
     WHERE 
     m.streamitem_id=t1.feedback_streamid
     AND
     t1.feedback_userid=$user1_id
     AND
     t1.feedback_rating=1 
     ORDER BY t1.feedback_id  DESC LIMIT 2,2 ";
     $result = mysqli_query($mysqli, $query) or die('Error: ' .mysqli_error($mysqli));
     $rowcount = mysqli_num_rows($result);

     $json = array(); 
     while ($row = mysqli_fetch_array($result)) {

     $last_id = $row['streamitem_id'];
     $json[] = array(
    'streamitem_id' => $row['streamitem_id'],
    'streamitem_content' => $row['streamitem_content'],
     );
     }
     echo json_encode(array('posts' => $json, 'last_id' => $last_id));

我是否最好使用返回的data.last_id将其提供给json的新函数,然后在单独的php页面中的新查询中执行类似m.streamitem_id < $last_id的操作?

2 个答案:

答案 0 :(得分:1)

这是一个更简化的答案版本,代码更易维护,没有重复:

$query = "SELECT *
  FROM streamdata m
  JOIN streamdata_feedback t1 
WHERE";

if ($last_id != 0) {
  $query .= " t1.feedback_id < $last_id AND";
}

$query .= " m.streamitem_id = t1.feedback_streamid AND
  t1.feedback_userid = $user1_id
  AND
  t1.feedback_rating = 1 
ORDER BY t1.feedback_id DESC LIMIT 2";

$result = mysqli_query($mysqli, $query) or die('Error: ' . mysqli_error($mysqli));

答案 1 :(得分:0)

如果在旧的last_id上,在@ADyson和他的有用评论的帮助下,我能够比较容易地对比这一点。

if ($last_id==0){
$query = "SELECT *
FROM streamdata m
JOIN streamdata_feedback t1 
WHERE 
m.streamitem_id=t1.feedback_streamid
AND
t1.feedback_userid=$user1_id
AND
t1.feedback_rating=1 
ORDER BY t1.feedback_id DESC LIMIT 2";
$result = mysqli_query($mysqli, $query) or die('Error: ' . mysqli_error($mysqli));

}else{
$testa=$_POST['last_id'];
$query = "SELECT *
FROM streamdata m
JOIN streamdata_feedback t1 
WHERE 
t1.feedback_id < $testa
AND
m.streamitem_id=t1.feedback_streamid
AND
t1.feedback_userid=$user1_id
AND
t1.feedback_rating=1 
ORDER BY t1.feedback_id DESC LIMIT 2";
}