Php 当多个用户插入新注释时,增加sql查询中的无限滚动分页偏移量
Ajax无限滚动从PHP脚本加载注释。PHP脚本为每个注释增加一个变量Php 当多个用户插入新注释时,增加sql查询中的无限滚动分页偏移量,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,Ajax无限滚动从PHP脚本加载注释。PHP脚本为每个注释增加一个变量$load++。然后在sqlOFFSET$load中使用,并在success函数中以div的形式将其发送回AJAX,用户再次滚动变量的值,然后再次发送到PHP,它检索下一组注释,这是可行的,但是: 如果多个用户对该帖子发表评论,则偏移量变量$load不会增加,如果用户现在滚动并触发AJAX脚本,则不会加载新的评论,而是复制最后一条评论,因为偏移量没有改变 有没有更好的方法来设置偏移量变量,还是我做错了?这种分页的更好方法是什么
$load++
。然后在sqlOFFSET$load
中使用,并在success函数中以div的形式将其发送回AJAX,用户再次滚动变量的值,然后再次发送到PHP,它检索下一组注释,这是可行的,但是:
如果多个用户对该帖子发表评论,则偏移量变量$load
不会增加,如果用户现在滚动并触发AJAX脚本,则不会加载新的评论,而是复制最后一条评论,因为偏移量
没有改变
有没有更好的方法来设置
偏移量
变量,还是我做错了?这种分页的更好方法是什么?我应该使用什么方法才能让脚本加载下一个新的注释(如果有)?我不确定我是否正确理解您当前的方法,但是,我在上一个项目中做了什么,并且成功了,我在页面中维护了一个名为call_seq initialize with zero的is变量。每次调用分页时,原因都会增加,并随Ajax调用一起发送
在php上,每次调用都会加载10条注释,因此在sql查询中,偏移量是使用值10*call_seq设置的。我不确定我是否正确理解您当前的方法,但是,我在上一个项目中做了些什么,这起到了作用,我在我的页面中维护了一个名为call_seq的is变量,并用零初始化。每次调用分页时,原因都会增加,并随Ajax调用一起发送
在php上,每次调用都会加载10条注释,因此在sql查询中,偏移量是使用值10*call_seq设置的。因为您没有发布任何代码,所以我将仅介绍我使用的方法 我假设您的数据库中有一些唯一的注释标识符,最好是一个自动递增的ID。这给了您的是,每个新注释的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、注释等。。。。来自post=。。。id<3
即使添加了一条新评论,这也没有任何区别,因为您保存了上一条评论的ID,并且知道接下来会出现什么评论。如您所见,此代码不使用偏移量
您可以存储注释的时间戳而不是ID
由于ID存储在客户端,用户可以篡改存储最后一条评论ID/时间戳的变量,但如果在PHP中正确使用该数据,则不会发生任何事情
当然,这可能不是最好的方法,也许还有更好的例子。我使用了这个,它对我很有用。因为您没有发布任何代码,所以我只告诉您我使用的方法的想法 我假设您的数据库中有一些唯一的注释标识符,最好是一个自动递增的ID。这给了您的是,每个新注释的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、注释等。。。。来自post=。。。id<3
即使添加了一条新评论,这也没有任何区别,因为您保存了上一条评论的ID,并且知道接下来会出现什么评论。如您所见,此代码不使用偏移量
您可以存储注释的时间戳而不是ID
由于ID存储在客户端,用户可以篡改存储最后一条评论ID/时间戳的变量,但如果在PHP中正确使用该数据,则不会发生任何事情
当然,这可能不是最好的方法,也许还有更好的例子。我使用了这个方法,效果很好。这是我在一些网站上发现的方法,目前看来是最好的。这是我在一些网站上发现的方法,目前看来是最好的。