所以我正在为用户创建一个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
的操作?
答案 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";
}