別のクエリによって更新されるランクを含む (ゲーム) リーダーボード テーブルがあります。それはIDを中心にしています-テーブルをクエリするとき、理想的にはN個のレコードを取得したいと考えています。したがって、次のように制限 N/2 で両方のレコードに対して UNION を実行しました。
(SELECT * FROM test1 t WHERE t.rank > (SELECT rank FROM test1 t2 WHERE id=ID)+0 ORDER BY rank LIMIT 0, N/2)
UNION ALL
(SELECT * FROM test1 t WHERE t.rank <= (SELECT rank FROM test1 t2 WHERE id=ID)+0 ORDER BY rank desc LIMIT 0, N/2) ORDER BY rank
リーダーボードのトップにいる場合、これはまったく機能しませんが、下位の N/2 のみが返されます。常に N レコードを返すようにする方法はありますか? 意図的に必要以上のレコードを取得し、必要のないレコードを切り取ることができると思いました。クエリでこれを行う方法はわかりませんが!
どんな助けでも感謝します:)