都道府県や製造メーカーなどの一覧が保存されているテーブルを2回結合したいという案件がありまして、しかも CodeIgniter で。
CodeIgniter を使うのであれば、クエリビルダを使いたくいろいろと試行錯誤したので備忘録として。
id | address | honseki |
---|---|---|
1 | 2 | 3 |
2 | 1 | 5 |
3 | 4 | 8 |
4 | 6 | 7 |
id | pref |
---|---|
1 | 茨城県 |
2 | 栃木県 |
3 | 群馬県 |
4 | 埼玉県 |
5 | 千葉県 |
6 | 東京都 |
7 | 神奈川県 |
8 | 山梨県 |
table01 に table02 を2回結合して以下のようにしたい!
id | address | honseki | add | hon |
---|---|---|---|---|
1 | 2 | 3 | 栃木県 | 群馬県 |
2 | 1 | 5 | 茨城県 | 千葉県 |
3 | 4 | 8 | 埼玉県 | 山梨県 |
4 | 6 | 7 | 東京都 | 神奈川県 |
上記を実現するためのクエリが以下。
SELECT `table01`.*, `add_tabl`.`pref` AS `add`, `hon_tabl`.`pref` AS `hon` FROM `table01` LEFT JOIN `table02` AS `add_tabl` ON `table01`.`address` = `add_tabl`.`id` LEFT JOIN `table02` AS `hon_tabl` ON `table01`.`honseki` = `hon_tabl`.`id` ORDER BY `id`
JOIN のときに呼び出すテーブル名を AS で変更すればよい。
上のクエリを CodeIgniter のクエリビルダで行うと以下になる。
$this->db->select('table01.*,add_tabl.pref AS add,hon_tabl.pref AS hon') ->join('table02 AS add_tabl','table01.address = add_tabl.id','left') ->join('table02 AS hon_tabl','table01.address = hon_tabl.id','left') ->order_by('id','ASC'); $list = $this->db->get('table01')->result();