Codeigniter

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