拙著「個人投資家は低位株で儲けなさい」が発売されました。
株価が安い「低位株」に投資する方法を解説しています。
自由国民社刊で、定価1,512円(消費税込み)です。
SQLToolsプラグインプチバージョンアップ
先日公開したSQLToolsプラグインを、若干バージョンアップしました。
MySQLの「SQL_CALC_FOUND_ROWS」の機能に対応しました。
1.SQL_CALC_FOUND_ROWSの概要
SQLでデータを読み込む際に、条件を満たすデータの全件数と、その条件に合う一部のデータを、合わせて得たい場合があります。
例えば、ブログの記事を10件ずつページ分割するとします。
この場合、分割後のページ数を計算するために、記事の全件数が必要です。
一方、個々のページでは、10件ずつの記事だけを読み込みます。
MySQLでは、このような処理をする際に便利な機能として、「SQL_CALC_FOUND_ROWS」があります。
SQLのSELECT文で、SELECTの直後に「SQL_CALC_FOUND_ROWS」を入れておくと、LIMITで件数を指定して読み込む場合でも、条件に合うすべてのデータの件数を得ることができます。
2.プラグインのバージョンアップ
バージョンアップしたプラグインは、以下からダウンロードします。
ダウンロードしたZipファイルを解凍すると、「plugins」のフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。
3.SQLの変更
SQL_CALC_FOUND_ROWSの機能を使いたい場合、SQL文側では、SELECTの直後に「SQL_CALC_FOUND_ROWS」を入れておきます。
例えば、IDが1番のブログから最新の10件だけ記事を読み込み、なおかつ記事の総数も得たいときは、SQLを以下のように組みます。
SELECT SQL_CALC_FOUND_ROWS entry_id FROM mt_entry WHERE entry_class = ? AND entry_status = 2 AND entry_blog_id = 1 ORDER BY entry_authored_on DESC LIMIT 10
4.テンプレートの変更
一方、MTSQLObjectsタグやMTSQLRowsタグでSQLを実行する際に、これらのテンプレートタグに「calc_rows="1"」というモディファイアを付加します。
すると、これらのタグのブロックの中で、「MTSQLTotalCount」というテンプレートタグを使って、条件に合うデータの件数を出力することができます。
5.注意事項
データの件数が多くなるにつれて、SQL_CALC_FOUND_ROWSは動作が重くなっていきます。
速度を重視する場合は、SQL_CALC_FOUND_ROWSを使わずに件数を数えるためのSQLを別途用意し、またテーブルに適切にインデックスを設定するなどの対策が必要です。
また、SQL_CALC_FOUND_ROWSはMySQL独自の機能です。
MySQL以外のデータベースでMovable Typeを運用するときには、この機能は使うことができません。