データベース関係クラスの使用(2) SQL Select編

SQLクラス

SQLクラスは、a-blog cmsで使用しているSQL文の作成を支援するクラスです。DBクラスとあわせて使用します。今回はSelect文を発行するケースで順にサンプルを紹介します。

基本のSELECTからテンプレートへの追加まで

// Templateクラス
$Tpl = new Template($this->tpl, new ACMS_Corrector());

// DBクラス @dsn()はconfig.server.php で定義されたデータベース情報を返します
$DB = DB::singleton(dsn());

// SQLクラス
$SQL = SQL::newSelect('entry');

// 対象の列を設定
$SQL->addSelect('entry_title');
$SQL->addSelect('entry_datetime');

// SQLを組み立てる
$q = $SQL->get(dsn());

// クエリーを実行して結果を取得
$all = $DB->query($q, 'all');

// 取得したデータをentry:loopとしてテンプレートに追加
foreach ( $all as $row ) {
    $Tpl->add('entry:loop', $row);
}

return $Tpl->get();

日付が新しい順に並び替えて10件取得する

$SQL =  SQL::newSelect('entry');

$SQL->addSelect('entry_title');
$SQL->addSelect('entry_datetime');

// エントリーの日付で降順に並び替える
$SQL->setOrder('entry_datetime', 'DESC');

// 取得数を10までに制限する
$SQL->setLimit(10);

$q = $SQL->get(dsn());
$all = $DB->query($q, 'all');

?>

カテゴリーごとにエントリーの数をカウントする

$SQL = SQL::newSelect('entry');

// 合計をカウントする ( MAX・MINなど集計関数 )
$SQL->addSelect('*', 'amount', null, 'COUNT');

// カテゴリーIDでグループする
$SQL->setGroup('entry_category_id');

$q = $SQL->get(dsn());
$all = $DB->query($q, 'all');

WHEREの処理

entry_blog_idが1のエントリー

$SQL = SQL::newSelect('entry');
$SQL->setSelect('*');


// 第三引数以降は省略できます
$SQL->addWhereOpr('entry_blog_id', 1, '=', 'AND');

$q = $SQL->get(dsn());
$all = $DB->query($q, 'all');

entry_category_idが1 または entry_user_idが1のエントリー

$SQL = SQL::newSelect('entry');
$SQL->setSelect('*');

// entory_category_idが1
$SQL->addWhereOpr('entry_category_id', 1);

// または entry_user_idが1
$SQL->addWhereOpr('entry_user_id', 1, '=', 'OR');

$q = $SQL->get(dsn());
$all = $DB->query($q, 'all');

entry_statusがdraft(下書き) か close(非公開)であるエントリー

$SQL = SQL::newSelect('entry');
$SQL->setSelect('*');

// draft か close である ( IN )
$SQL->addWhereIn('entry_status_id', array('draft', 'close'));

$q = $SQL->get(dsn());
$all = $DB->query($q, 'all');

title, body, nameのいずれかに指定した文字列を含むコメント

$keyword   = 'hogehoge';

$SQL = SQL::newSelect('comment');
$SQL->addSelect('*');

$SQL->addWhereOpr('CONCAT(comment_title, comment_body, comment_name)', "%$keyword%", 'LIKE');

$q = $SQL->get(dsn());
$all = $DB->query($q, 'all');