php - 当多个用户插入新评论时,在 sql 查询中增加无限滚动分页偏移量

标签 php jquery mysql ajax

Ajax 无限滚动从 PHP 脚本加载评论。 PHP 脚本为每个评论增加了一个变量$load++。然后在 sql 中使用 OFFSET $load 并在成功函数中将其在 div 中发送回 AJAX,用户再次滚动变量的值再次发送到 PHP 它检索下一组评论,这有效,但是:

如果多个用户对该帖子发表评论,偏移量变量 $load 不会递增,并且如果用户现在滚动并触发 AJAX 脚本,则不会加载新评论,而是复制最后一条评论,因为offset 没有改变。

有没有更好的方法来设置 offset 变量,还是我做错了?这种分页有什么更好的方法?我应该使用什么方法让脚本加载下一个新评论(如果有的话)?

最佳答案

由于您没有发布任何代码,我将只向您介绍我使用的方法。

我假设您的数据库中有一些唯一的评论标识符,最好是自动递增的 ID。这给你带来的是每条新评论的 ID 都比之前的评论大。因此,当从数据库中获取评论时,您可以将最后一条评论的 ID 存储在您的 JavaScript 代码中。然后,当到达页面末尾后获取更多评论时,您将该 ID 发送到您的 PHP 页面。您可以使用该 ID 来选择比您选择的最后一条消息“更早”的所有消息,或者换句话说,具有较小 ID 号的消息。

一个小示范:

id    |    comment    |  ....
1            test1
2            test2
3            test3
4            test4
5            test5
6            test6

请记住,ID为6的评论是最新添加的评论。

假设您在页面上显示了评论 5、4 和 3,并将 ID 3 作为最后一条评论存储在您的 javascript 中。现在 ID 为 6 的评论被添加到数据库中。您尝试获取新评论并发送您存储的 ID,ID 3。在您的 PHP 脚本中,您选择接下来的五个 ID 小于 3 的评论。在本例中,这将是 2 和 1

SELECT id, comment, .... FROM comments WHERE post = ... AND id < 3

即使添加了一条新评论,也没有任何区别,因为您已经保存了上一条评论的 ID,并且您知道接下来会出现什么评论。如您所见,此代码不使用 OFFSET

您可以存储评论的时间戳而不是 ID。

由于 ID 存储在客户端,用户可以篡改存储最后一条评论的 ID/时间戳的变量,但如果在 PHP 中正确使用该数据,则不会发生任何事情。

当然,这可能不是最好的方法,也许还有更好的例子。我用过这个,效果很好。

关于php - 当多个用户插入新评论时,在 sql 查询中增加无限滚动分页偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47984520/

相关文章:

php - 在单独的服务器上监控 zip 的进度

php - 如何使用php在.ism和斜杠之间获取字符串?

jquery - 在同一页面的多个 id 中运行相同的效果

php - 如何在发送前获取 curl 请求的时间戳?

php - Laravel:从 MySQL 查询中获取单个值

javascript - 数据表重新排序保存到数据库

javascript - AJAX 成功代码中的自定义切换功能

数据库 |如何从混合整数字符串中选择整数值?

python - 在 SQLAlchemy 中以 dict 形式检索查询结果

php - 删除图像的强制选项,无法将帖子插入 mysql 数据库