SELECT文のLIMIT句とOFFSET句で表示データを分割する

LIMIT句とOFFSET句を組み合わせることで結構簡単にページング機能などがつくれます。ただし、PostgreSQLとMySQLでは利用できますが、その他の主要なデータベースではサポートされていないようなので注意が必要です。

できること

aipoではタイムラインなどで「もっと読む」の機能を実装するのに利用しています。

  • LIMIT → SELECT文で返す行数を指定。
  • OFFSET → 開始位置を指定。(例:5 → 5行飛ばして6行目が開始位置となる)


使い方

OFFSETを省略してLIMITのみを使う場合は指定する順番が逆になるところに気をつけたいです。

SELECT * FROM `テーブル名` LIMIT (開始位置),(取得したい行数);
SELECT * FROM `テーブル名` LIMIT (取得したい行数) OFFSET (開始位置);


20行飛ばして21行目から20行取得するSELECT文の例。

SELECT * FROM `テスト` LIMIT 20 OFFSET 20;

実際には、20が入っている箇所に変数をいれてページングを作っていく感じになります。 上記のSELECT文の実行結果は以下のようになります。

SELECT * FROM `テスト` LIMIT 20 OFFSET 20;
//実行結果
<テーブル名:テスト>
 no  name
 21  山田
 22  佐藤
 23  鈴木
 24  木村
 ・   ・
 ・   ・
 ・   ・
 38  西田
 39  北野
 40  星川