我论坛中的帖子都有一个单独的固定链接。
这些帖子是分页的,用户可以按日期和评级对其进行排序。
当访问永久链接时,由于分页,需要计算帖子所在的页面。
这些帖子以自动递增的 id 存储在 mysql innodb 表中。
目前,当帖子按分数(评级)排序时,我使用以下计算:
<?php
// These variables originate from the corresponding uri segments
// For example: http://domain.tld/topics/[ID]/[SLUG]/[POST_ID]
$post_id = $uri->segment(4);
$topic_id = $uri->segment(2);
$post_per_page = 10;
$query = $db->query('SELECT id FROM topic_posts WHERE topic_id = ' . $topic_id . ' ORDER BY score desc');
foreach ($query as $key => $post)
{
if ($post->id == $post_id)
{
$postOnPage = ceil(($key + 1) / $post_per_page);
break;
}
}
但是,帖子的数量会不断增加,获取所有帖子似乎很尴尬。
对于日期排序,我使用以下查询,但它不适用于评级排序,因为帖子 ID 不是按递增顺序排列的:
SELECT CEIL((COUNT(*) + 1) / $posts_per_page) FROM topic_posts WHERE topic_id = $topic_id AND id < $post_id;
所以......我怎样才能避免 php foreach 循环并通过 db 查询实现相同的效果?