今回使わなかったが、他にも構文があったのでメモ
SELECT *
FROM works
ORDER BY work_date DESC
LIMIT 30 OFFSET 60;
- works テーブルからデータを取得
- work_date の降順(新しい日付が先)で並べる
- 61件目から30件分を取り出す
⸻
LIMIT と OFFSET の意味
- LIMIT n → 最大で n 件を取得
- OFFSET m → 先頭から m 件スキップする
今回の例は:
- OFFSET 60 → 先頭60件を飛ばす
- LIMIT 30 → そこから30件取得
→ 結果は 「61〜90件目」
⸻
ページングのイメージ
「1ページに30件表示」の場合:
- 1ページ目 … LIMIT 30 OFFSET 0
- 2ページ目 … LIMIT 30 OFFSET 30
- 3ページ目 … LIMIT 30 OFFSET 60 ← 今回のSQL
これで ページネーション が実現できる。
⸻
注意点
- OFFSETが大きいと遅い
- データベースは先頭から OFFSET 件を読み飛ばす必要がある
- データ件数が大きいと無駄が増えてしまう
大量データにはカーソルベースが有効らしい。
次はそれを調べてみる。