これは、結果の通常のページ付けと同じように聞こえますが、リクエストされたページ番号またはオフセットに基づいて特定のページに移動するのではなく、ユーザーの検索が検索結果のどこにアルファベット順に収まるかに基づいて特定のページに移動する点が異なります。
この位置の後に 10 行、前に 10 行をフェッチするとします。
ユーザーが「Smith」を検索する場合、次のように 2 つの選択を行うことができます。
SELECT
name
FROM
companies
WHERE
name < 'Smith'
ORDER BY
name DESC
LIMIT 10
その後
SELECT
name
FROM
companies
WHERE
name >= 'Smith'
ORDER BY
name
LIMIT 10
UNION を実行して 1 つのクエリでそれを取得できます。上記は単純化されています。
ユーザーが検索した用語は、これらの結果の半分に収まります。完全一致があれば、最初の完全一致が 11 番目になるように配置されます。
ユーザーが 'aaaaaaaa' を検索すると、最初の 10 件の結果だけが得られ、'zzzzzzzz' は最後の 10 件の結果しか得られないことに注意してください。
問題の SQL エンジンは文字列間の >= と < の比較を許可する (そしてインデックスでそれを最適化できる) と仮定していますが、これはテストしていません。MySQL のように、国際化された照合をサポートしている場合は、ASCII 以外の文字の順序付けを正しく行うこともできます。