MySQLでlimitを使用したデータ件数カウント(SQL_CALC_FOUND_ROWS)
今回はMySQLのTipsです。
Webサイトの検索画面などで、
「50件/10000件中ヒットしました。」
という画面を作る場合にとても便利なMySQL関数です。
例:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
これだけでOK。
■1回目のSQLでは、LIMITを含むSELECT文の先頭に
「SQL_CALC_FOUND_ROWS」というオプションをつけて実行します。
これでいつも通り、特定の条件で絞り込んだ結果の先頭n件のデータが取得できます。
データ件数を取得する場合は、PHPならmysql_num_rows()でカウントできます。
■2回目は「SELECT FOUND_ROWS();」という関数をコールします。
これで1回目のSQLでLIMIT指定していない場合の全件数が取得できます。
通常は別途「SELECT count(*) FROM table_name」なんて再度実行する必要が
あるのですがその必要はありません。
よくプログラムでwhere句を変数にもっておいて、
「select a,b,c~」と「select count(*)~」の2種類のSQLにつけて
select文を2回実行するというプログラムを作っていました。
同じ条件のSQLを実行するなんて無駄だな~。と思っていたのですが
MySQLくんは用意してくれています。すごくいい子です。
MySQLのマニュアル
http://dev.mysql.com/doc/refman/5.1/ja/information-functions.html
要するに同じ条件のSQLを2回実行する必要がないため、
超高速です。
MySQLを使用した検索画面を作っている人は、パフォーマンス改善のためにも
とても有効な関数ですので検討してみてください。

最近のコメント