環境
FOUND_ROWS
- 最後にSELECTした行数を取得するFOUND_ROWS()。
- ページングする場合など、分母が欲しい場合があります。
- たとえば100レコードあるけど、1ページに表示するデータは10レコードの場合。
- 普通に考えたら、10レコード取得するSELECTと、同じ条件でCOUNT(*)するSELECTを発行すると思います。
- MySQLにはこういう時のためと言える機能があります。
実行例
- SELECTを2回発行することに違いはないですが、スマートですよね。
SQL_CALC_FOUND_ROWS指定なし
- LIMIT 10しているので、FOUND_ROWS()も10を返却します。
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指定あり
- LIMIT 10していますが、SQL_CALC_FOUND_ROWS指定しているので、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)