最後にSELECTした行数を取得するFOUND_ROWS()。
ページングする場合など、分母が欲しい場合があります。
たとえば100レコードあるけど、1ページに表示するデータは10レコードの場合。
普通に考えたら、10レコード取得するSELECTと、同じ条件でCOUNT(*)するSELECTを発行すると思います。
MySQLにはこういう場合用とも言える機能があります。
以下の実行例の通りです。
ま、SELECTを2回発行することに違いはないですが、スマートですよね。
■SQL_CALC_FOUND_ROWS指定なし
mysql> SELECT * FROM tbl_name LIMIT 10;
-----------------------------
10 rows in set (0.00 sec)
mysql> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
| 10 |
+--------------+
1 row in set (0.00 sec)
■SQL_CALC_FOUND_ROWS指定あり
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name LIMIT 10;
-----------------------------
10 rows in set (0.00 sec)
mysql> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
| 42 |
+--------------+
1 row in set (0.00 sec)
ページングする場合など、分母が欲しい場合があります。
たとえば100レコードあるけど、1ページに表示するデータは10レコードの場合。
普通に考えたら、10レコード取得するSELECTと、同じ条件でCOUNT(*)するSELECTを発行すると思います。
MySQLにはこういう場合用とも言える機能があります。
以下の実行例の通りです。
ま、SELECTを2回発行することに違いはないですが、スマートですよね。
■SQL_CALC_FOUND_ROWS指定なし
mysql> SELECT * FROM tbl_name LIMIT 10;
-----------------------------
10 rows in set (0.00 sec)
mysql> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
| 10 |
+--------------+
1 row in set (0.00 sec)
■SQL_CALC_FOUND_ROWS指定あり
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name LIMIT 10;
-----------------------------
10 rows in set (0.00 sec)
mysql> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
| 42 |
+--------------+
1 row in set (0.00 sec)