ブログが続かないわけ

この日記のはてなブックマーク数
Webエンジニアが思うこと by junichiro on Facebook

[PHP]Zend_Db で作成したSQLサンプル

このエントリーを含むはてなブックマーク hateb
Zend_Db というかZend_Db_Select でSQL を書かずにクエリーを作成した。Zend_Db は機能が中途半端なところもあるが、ある程度のクエリなら書くことができる。今回は実践例としてjoin、及びjoin 内の副問い合わせを実装する例を、自分用の覚え書きとしてここに記す。

目的のSQL
SELECT
u.user_id,
u.register_name,
u.uniform_no,
u.type_id
FROM
USER_REG_TB u
JOIN
(
SELECT
distinct(user_id)
FROM
ENTRY_TB
WHERE
entry_state_id IN ('1', '2')
) t
ON t.user_id = u.user_id
JOIN
TYPE_TB p
ON p.type_id = u.type_id
WHERE
u.group_id = '1000'
AND u.f_del = 0
ORDER BY
u.type_id, u.user_id

Zend_Db によるコード
$select = $this->select()
->setIntegrityCheck(false)
->from(
array('u' => 'USER_REG_TB'),
array(
'u.user_id',
'u.register_name',
'u.uniform_no',
'u.type_id'
)
)
->join(
$this->select()
->setIntegrityCheck(false)
->from(
array('ENTRY_TB'),
array('distinct(user_id)')
)
->where('entry_state_id IN (?)', array('1', '2')),
't.user_id = u.user_id',
array()
)
->join(
array('p' => 'TYPE_TB'),
'p.type_id = u.type_id'
)
->where('u.group_id = ?', '1000')
->where('u.f_del = ?', '0')
->order(array('u.type_id', 'u.user_id'))
;

SQL の方が直感的でわかりやすいことは否めない。
社内にO/R マッピングを推奨するのは大変だ。
この記事のトラックバックURL
http://en.yummy.stripper.jp/trackback/1172088
トラックバック
コメント
サブクエリの定義は
->join(
 array('t'=> $this->select() ....),
't.user_id = u.user_id', ...)


ですよね。
| walkmane | 2013/07/18 2:25 PM |
ご指摘ありがとうございます。そうですね!

最近Zend_Db を触ることはほとんどないので、あやふやですが、それが正解だと思います。
| junichiro | 2013/07/18 3:10 PM |









関連情報