如何在分页注释系统中查找注释的“页码”


How to find "page" number for a comment in a paginated comment system?

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

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

谁能提出更简单或更有效的方法?

这一切都可以用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指的是发表评论的博客/论坛帖子,$comment_id是您正在寻找的评论。

好吧,如果您知道每页的 # 条评论并且没有改变,您应该能够从 MySQL 中计数。 如果你的浏览器永久链接有comment_id,将是这样的:

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

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