私のフォーラムのすべての投稿には、個別のパーマリンクがあります。
投稿はページ分割されており、ユーザーは日付と評価で並べ替えることができます。
パーマリンクにアクセスすると、ページネーションのために投稿が存在するページを計算する必要があります。
投稿は、自動インクリメント 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クエリで同じことを達成できますか?