Codeigniterで「ON DUPLICATE KEY」を使う
DBを同期する時だったり、「ON DUPLICATE KEY」を使いたいシーンがあった場合、CodeigniterのActive Recordでは対応できません。
そこで、どうやるものかと探していたところ、海外フォーラム・Stackoverflowにいい例がありました。
参考:How would I use ON DUPLICATE KEY UPDATE in my CodeIgniter model? (Stackoverflow)
これの中盤くらいにある関数を使ってみたところ、無事Codeigniterで「ON DUPLICATE KEY」が使えました(on Codeigniter 3,0)。
[php] public function updateOnDuplicate($db, $table, $data ) { $this->db = $this->load->database($db, TRUE, TRUE); if (empty($table) || empty($data)) return false; $duplicate_data = array(); foreach($data AS $key => $value) { $duplicate_data[] = sprintf("%s='%s'", $key, $value); } $sql = sprintf("%s ON DUPLICATE KEY UPDATE %s", $this->db->insert_string($table, $data), implode(',', $duplicate_data)); $this->db->query($sql); return $this->db->insert_id(); } [/php]
本家と違うのは、更新するDBの選択ができるようになっています。
個人的に作っているシステムが、まとめDB->個々のDBに同期する必要があったので、これは非常に便利。