TOP書籍連動> ユーザ定義関数
SQLiteの高度な活用術
SQLiteの高度な活用術

第6回:ユーザ定義関数のまとめ

著者:Peter Lavin   2006/5/8
1   2  次のページ
ユーザ定義関数

   今回のアプリケーションの仕様の1つに、最新のリンクをハイライトするという機能があります。この機能は最近2週間の間に追加されたリンクに異なるCSS のクラスを付けることで実装します。whenaddedフィールドを現在の日付から引けば、リンクをどうするのかを決定することができます。

   MySQLを使用する場合は以下のようなSQL文になります。

IF(whenadded > SUBDATE(CURDATE(),INTERVAL
'14' DAY), 'new',
'old') AS cssclass

   cssclassという名前のフィールドに、newもしくはoldの値が格納されます。このフィールドの目的はアンカータグのCSSクラスを決定するためのものです。PHPで毎回whenaddedフィールドをチェックするよりもSQLを使用したほうがずっとスマートです。

   しかしSQLiteには日付の引き算を行う関数がありません。さらにいってしまうとSQLiteのサイトでは日付関数について何もドキュメント化されていません。ということはPHPで毎回whenadded フィールドを取得して計算しなければならないということなのでしょうか。

   これは、デフォルトのSQLite関数を使用してはできませんが、ユーザ定義関数(UDF)を使用することで実現することができます。まずはPHPで日付の引き算を行う関数を作成します。リスト8に掲載してあるcheck_when_added()関数を見ればわかりますが、それほど難しくありません。

リスト8
//////////////////////////////////////////////////////////
function check_when_added($whenadded){
    // 2週間以内かどうかをチェックする
    $type = '';
    $diff = floor(abs(strtotime('now') - 
              strtotime($whenadded))/86400);
    if($diff < 15){
        $type = 'new';
    }
    return $type;
}
//////////////////////////////////////////////////////////
...
    //関数を登録する
    $db->createFunction('cssclass','check_when_added',1);
    $strsql ="SELECT url, precedingcopy, linktext, ".
        "followingcopy, ".
        "UPPER(SUBSTR(linktext,1,1)) AS letter, ".
        "cssclass(whenadded) AS type, target ".
        "FROM tblresources ".
        "WHERE reviewed = 1 ".
        "ORDER BY letter ";
    $result = $db->query($strsql);
...

   このリストにはSQLiteからcheck_when_added()関数を利用するためのメソッドである、SQLiteDatabaseクラスのcreateFunction() メソッドも含まれています。SQLiteでこの関数を利用するにはcssclass(whenadded)AS typeとSELECT句の中に記述します。

   このようにすると、結果セットはtypeというフィールドでnewもしくは空文字の値が格納されるようになります。この値を使用することで、アンカータグに指定するクラスを決定することができます。最新のリンクはハイライトされるように普通のものとは異なるCSSのクラスを指定すればよいわけです。

1   2  次のページ

PHPプログラマーズマガジン 書籍紹介
PHPプログラマーズマガジン

PHPプログラマーズマガジンは、PDF形式で読者の方にお届けするPHP言語(PHP: Hypertext Processor)専門誌です。 カナダMTA出版のphp|architect誌を日本語に翻訳し、独自の記事を加えて月刊でお届けしています。

発行:アシアル株式会社  価格:1,029円

 ご購入はこちら
http://www.asial.co.jp/magazine/
Peter Lavin
著者プロフィール
Peter Lavin
カナダ、トロントでWebデザイナ/Web開発者として働いています。現在、PHPのオブジェクト指向をテーマにした本を執筆しており、No Starch Press社より出版される予定です。


INDEX
第6回:ユーザ定義関数のまとめ
ユーザ定義関数
  バックエンドでのVDFの利用