(ページの作成: == 環境 == *DBMS = MySQL 5ぐらい == FOUND_ROWS == *最後にSELECTした行数を取得するFOUND_ROWS()。 *ページングする場合など、分母が欲しい場...)
 
 
40行目: 40行目:
 
  +--------------+
 
  +--------------+
 
  1 row in set (0.00 sec)
 
  1 row in set (0.00 sec)
 +
 +
[[Category:SQL]]

2013年4月20日 (土) 23:03時点における最新版

環境

  • DBMS = MySQL 5ぐらい

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)

facebook slideshare rubygems github qiita