MySQLでLIMIT句を使ってページネーション(次の行)を取得する方法
MySQLでページネーション(特定の範囲の行だけを取得すること)を実現したい場合は、LIMIT句を使用します。LIMIT句では「開始位置(オフセット)」と「取得する行数」を指定できるため、大量のデータの中から必要な部分だけを効率よく取り出せます。
この記事では、実際にテーブルを作成し、データを挿入したうえで、次の行を取得するページネーションの具体的な手順を解説します。
1. サンプルテーブルを作成する
まずはデモ用のテーブルを作成しましょう。以下のSQLでは、自動採番されるidカラムと名前を格納するnameカラムを持つテーブル「demo40」を定義しています。
mysql> create table demo40
-> (
-> id int not null auto_increment primary key,
-> name varchar(40)
-> );
Query OK, 0 rows affected (1.73 sec)
2. テーブルにレコードを挿入する
続いて、INSERT文を使ってサンプルデータを登録します。
mysql> insert into demo40(name) values('Chris');
Query OK, 1 row affected (0.23 sec)
mysql> insert into demo40(name) values('David');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo40(name) values('Mike');
Query OK, 1 row affected (0.10 sec)
mysql> insert into demo40(name) values('Sam');
Query OK, 1 row affected (0.19 sec)
mysql> insert into demo40(name) values('Carol');
Query OK, 1 row affected (0.12 sec)
mysql> insert into demo40(name) values('bob');
Query OK, 1 row affected (0.13 sec)3. 登録された全レコードを確認する
SELECT文でテーブルの中身を確認してみましょう。
mysql> select * from demo40;
実行すると、以下のように6件のレコードが表示されます。
+----+-------+
| id | name |
+----+-------+
| 1 | Chris |
| 2 | David |
| 3 | Mike |
| 4 | Sam |
| 5 | Carol |
| 6 | bob |
+----+-------+
6 rows in set (0.00 sec)
4. LIMIT句で次の行を取得する(ページネーション)
ここが本題です。MySQLでページネーションを行うには、LIMIT句に「オフセット, 行数」の形式で値を指定します。
例えば、「5行目から2件を取得したい」場合は、オフセットに「4」(先頭行を0として数えるため)、行数に「2」を指定します。
mysql> select * from demo40 limit 4,2;
実行結果は以下の通りです。idが5と6の、つまり5行目以降の2件だけが取得できました。
+----+-------+
| id | name |
+----+-------+
| 5 | Carol |
| 6 | bob |
+----+-------+
2 rows in set (0.00 sec)
まとめ
MySQLでページネーションを実装するには、LIMIT句の第1引数にオフセット(スキップする行数)、第2引数に取得する行数を指定します。
- LIMIT 行数:先頭から指定した行数だけ取得
- LIMIT オフセット, 行数:指定位置から指定行数だけ取得
この仕組みを応用すれば、Webアプリケーションなどでよく見られる「次へ」「前へ」ボタンによるページ送り機能も簡単に実装できます。
-
MySQLで次の自動インクリメントIDを取得する方法
MySQLには、自動採番(オートインクリメント)を実現するためのAUTO_INCREMENTキーワードが用意されています。開始値はデフォルトで「1」に設定されており、新しいレコードが挿入されるたびに1ずつ加算されていきます。 MySQLで次の自動インクリメントIDを取得したい場合は、last_insert_id()関数を使う方法と、information_schemaのAUTO_INCREMENT値をSELECT文で参照する方法の2つがあります。本記事では後者の方法を具体的な例とともに解説します。 1. 自動インクリメント付きテーブルの作成 まず、「id」カラムを自動インクリメントに設定したテ
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected