うろぐ

インターネットサービス&デジタル家電&デジタルカメラ&パソコンのレビュー

LAMPPが日本でもようやく普及してきたおかげで、PHPやRuby on Railsのソースが簡単に手に入るようになりました。わたしはPerlをインタープリターとして使用していますが、10年以上前に独学で覚えたので、情報量が少なくとても苦労した覚えがあります。
それに比べたら、現代はとても楽だと言えるでしょう。

それでも、Perlは使用される機会が減少の傾向にあり、PHPなどと比較すると、ネットや書籍で手に入る情報用は以外に少ないです。

先日も知人からPerlからMySQLのデータのテーブルに格納されているデータ数をカウントするソースを教えて欲しいという依頼を受けました。
試しにネットで検索したところ、近似値のソースは幾つも見つかりましたが、完全に利用出来るソースが見つからなかったので、ここに書き留めておきます。

ソースは簡単です。

    my $rows = $dbh->selectrow_array($query);

    if ($rows ==0){
        $row =0;
    }
    else{
        my $sth = $dbh->prepare($query); # $queryの実行準備
        $sth->execute(); # $queryを実行する
        my @rows = $sth->fetchrow;
        $row = $rows[0]; # 該当の登録件数を数える
    }

説明

まず、
my $rows = $dbh->selectrow_array($query);
でデータの有無を判定して、データがあれば
my $sth = $dbh->prepare($query); # SQL($query文)の実行準備
$sth->execute(); # SQL($query文)を実行する
my @rows = $sth->fetchrow;
に移行します。
データが無ければ「0ゼロ」を返します。

該当する数を
$row = $rows[0];
で変数$rpwに代入します。

短い構文ですが、多用するので、わたしはサブルーチン化しています。
例えば

my $query = qq{ select count(*) from $db_name where NUM like "$num%" && EX_CTG="$ctg" };
my $row = &count_data($query); # 該当のデータを数える
sub count_data { }
というサブルーチンを作成しておけば、わずか2行でデータの数を取得出来ます。
とても便利です。

4月 12th, 2009

Posted In: MySQL Server

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です