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に同期する必要があったので、これは非常に便利。
