如何在分页评论系统中查找评论的“页面”编号?

时间:2012-04-23 18:16:54

标签: php mysql pagination

我有一个分页评论系统,每页10个。我想对评论进行永久链接。我希望能够让脚本找出评论所在的页面,而无需指定页码,也不需要过多的查询或处理。因此,例如,第5页上的评论链接将在评论页面5上打开浏览器并#scrolled到评论(而不是在其自己的页面上显示评论)。

我曾经想过使用2个mysql查询,一个SELECT所有CommentId然后是php array_search来查找结果中的位置,从中我可以计算它将在哪个页面上。第二个查询将获得所需的注释页面。这似乎效率很低,特别是如果有很多评论需要提及。

有人能建议更简单或更有效的方法吗?

2 个答案:

答案 0 :(得分:3)

如果您知道每页的评论数量并且没有改变,那么您应该可以从MySQL算起来。如果您的浏览器perma-link中包含comment_id,则类似于:

select
    count(*)
from
    comments c
where
    comment_id < $comment_id
and
    topic_id = $topic_id -- or whatever

然后在PHP中使用此编号,您将能够计算要在数据库中查找和显示的页面。

答案 1 :(得分:3)

使用SQL可以非常轻松地完成所有操作,假设comment_id是某种形式的自动递增数字,这应该返回确切的页面:

SELECT FLOOR(COUNT(*)/$comments_per_page) FROM COMMENTS 
   WHERE ENTRY_ID = $entry_id AND comment_id < $comment_id;

当然,这假设“平坦的评论”(没有父子关系)。显然,$comments_per_page是每个页面上显示的评论数量(这可能只是一个常量),$entry_id指的是评论的博客/论坛帖子和{{1}是你要找的评论。