データベース関係クラスの使用(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');