MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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_ROWSFOUND_ROWS()を組み合わせれば、ページネーションなどで表示件数を絞りながら、同時に全体の件数を効率的に取得できます。検索結果の総件数表示が必要なWebアプリケーション開発などで非常に便利なテクニックなので、ぜひ活用してください。

  1. 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

  2. MySQLでデータベース内のテーブル数を表示するクエリの書き方

    INFORMATION_SCHEMA.TABLESを使ってテーブル数を取得するここでは例として、「WEB」というデータベースを使用しているものとします。このデータベース内に存在するテーブルの総数を調べたい場合、MySQLではINFORMATION_SCHEMA.TABLESを利用するのが便利です。INFORMATION_SCHEMAは、MySQLサーバーが管理しているメタデータ(データベース名、テーブル名、カラム情報など)を格納する仮想データベースであり、これを参照することでスキーマに関する情報をSQLで簡単に取得できます。テーブル数を表示するクエリ「WEB」データベース内のテーブル数を表示す