【MySQL】最後のクエリの総行数を取得する方法:SQL_CALC_FOUND_ROWSとFOUND_ROWS()の使い方
MySQLでは、FOUND_ROWS()関数を使うことで、直前に実行したクエリが該当させた全行数を簡単に取得できます。この記事では、SQL_CALC_FOUND_ROWSと組み合わせた具体的な使い方を、実例とともにわかりやすく解説します。
基本構文
LIMIT句で表示件数を制限しながら、条件に一致する全行数を把握したい場合は、SELECT文にSQL_CALC_FOUND_ROWSを付けて実行します。基本構文は以下の通りです。
SELECT SQL_CALC_FOUND_ROWS TABLE_NAME FROM `information_schema`.tables WHERE TABLE_NAME LIKE "yourValue%" LIMIT yourLimitValue;
実行例:テーブル名を検索してみよう
ここでは、データベース「web」内にある、DemoTable29から始まる名前の多数のテーブルを対象にします。上記の構文を使って、該当する行を4件だけ取得してみましょう。
mysql> SELECT SQL_CALC_FOUND_ROWS TABLE_NAME FROM `information_schema`.tables WHERE TABLE_NAME LIKE "DemoTable29%" LIMIT 4;
このクエリを実行すると、以下のような結果が出力されます。
+--------------+ | TABLE_NAME | +--------------+ | demotable29 | | demotable290 | | demotable291 | | demotable292 | +--------------+ 4 rows in set (0.01 sec)
直前のクエリの総行数を確認する
次に、直前のクエリで条件に一致した全行数を確認します。先ほどのクエリではLIMIT 4を指定していたため、画面上には4行しか表示されていませんが、実際には何件該当していたのでしょうか。
以下のようにfound_rows()関数を呼び出すだけで確認できます。
mysql> select found_rows();
実行結果は以下の通りです。
+--------------+ | found_rows() | +--------------+ | 10 | +--------------+ 1 row in set (0.00 sec)
まとめ
この結果から、LIMIT句で4件のみ表示されたものの、条件「DemoTable29%」に一致するテーブルは合計10件存在していたことがわかります。
このように、SQL_CALC_FOUND_ROWSとFOUND_ROWS()を組み合わせれば、ページネーションなどで表示件数を絞りながら、同時に全体の件数を効率的に取得できます。検索結果の総件数表示が必要なWebアプリケーション開発などで非常に便利なテクニックなので、ぜひ活用してください。
-
MySQLでテーブルをクエリし、直近3日より前に投稿された行を取得する方法
はじめにここでは、現在の日付を「2019-10-20」として話を進めます。まずは例として、テーブルを作成してみましょう。mysql> create table DemoTable1582 -> ( -> PostedDate datetime -> );Query OK, 0 rows affected (13.36 sec)レコードの挿入insertコマンドを使用して、テーブルにいくつかのレコードを挿入します。mysql> insert into DemoTable1582 values(2019-01-21 12:34:40);Query O
-
MySQLでデータベース内のテーブル数を表示するクエリの書き方
INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す