「前へ」ボタンと「次へ」ボタンを作成しようとしています。SQL ステートメントによって生成される最後の前のレコードと次のレコードが 1 つずつ表示されます。
ただし、ID は単純に -1 と +1 ではありません。つまり、このレコード ID が 40 の場合、前の ID は 31 で、次の ID は 43 になる可能性があります。
この目標を達成できるSQL関数はありますか? ありがとう!
次の ID の選択:
SELECT * FROM your_table WHERE your_id>$current_id ORDER BY your_id ASC LIMIT 1
前の ID の選択:
SELECT * FROM your_table WHERE your_id<$current_id ORDER BY your_id DESC LIMIT 1
limit句を使用して、スキップするレコードの数を追跡する必要があります。
たとえば、レコード10にいる場合はlimit 10,1
、最初の10をスキップして、1つ戻します。「次へ」ボタンは、クエリをに変更しますlimit 11,1
。
知っているorder by
(この場合はIDフィールドが完璧に見える)限り、データは毎回まったく同じ順序で返されるため、結果セットを一度に1行ずつ確実に前後に移動できます。
ドキュメントから抜粋:
LIMIT句を使用して、SELECTステートメントによって返される行数を制限できます。LIMITは、1つまたは2つの数値引数を取ります。これらは両方とも非負の整数定数でなければなりません(プリペアドステートメントを使用する場合を除く)。
2つの引数を使用すると、最初の引数は返される最初の行のオフセットを指定し、2番目の引数は返される行の最大数を指定します。最初の行のオフセットは0(1ではありません)です。
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15