ランクでソートする必要がある記事のページ分割されたリストがありますが、記事の位置が <> 0 の場合、その特定の位置に挿入する必要があります。少なくとも、現在のページの正しい位置を抽出した記事を取得し、それらを PHP で並べ替えて、適切な位置に表示できると考えました。これを MySQL で 1 つのクエリだけで実行したい
私の試みのいくつかは次のとおりです。
このクエリは、最初に現在のページの正しい位置にある記事を選択し、次にランクが最も高い記事を選択しようとします。
SELECT id, rank_score, position
FROM Articles
ORDER BY ((position <= (50 * 1)) AND (position > 50 * (1-1))) DESC, rank_score DESC
LIMIT 0, 50
50 はページに表示される記事の数、1 は現在のページ番号であり、クエリの生成時に追加されます。
このクエリには、ページ 2 の結果が間違っているという問題があります。これは、LIMIT 50,50 を追加することで、そのページに掲載されている記事を超えてしまう可能性があるためです。
別の試み:
SELECT (
SELECT id, rank_score, position
FROM Articles
ORDER BY ((position <= (50 * 1)) AND (position > 50 * (1-1))) DESC, rank_score DESC
LIMIT 50)
UNION (
SELECT id, rank_score, position
FROM Articles
ORDER BY rank_score DESC LIMIT x)
2 番目のクエリが正しく機能するには、最初のクエリから返される行数と同じ制限が必要です。さらに、2 番目のクエリでは位置が無視されるため、ランクが非常に高いだけでなく、位置も非常に高い記事は常に早く表示されます。