大量のアップデート文を流すときに
速度改善で役立つSQL
cakephp仕様だけど、別にSQL文はどこでも使えそう
$arr[$keyword] = $count; $this->updateMultiKeywords($arr); //バルクアップデート public function updateMultiKeywords($keywords) { $imps = implode(",", $keywords); $imps = explode(",", $imps); $aryKeyword = array_keys($keywords); $holder = implode(',', array_fill(0, count($keywords), '?')); $fields = array_merge($aryKeyword, $imps, $aryKeyword); /* こんな感じのSQL UPDATE keyword SET count = ELT(FIELD(keyword,'a','b','c'), 1,2,3) WHERE keyword IN ('a','b','c') */ $sql = "UPDATE keyword SET count = ELT(FIELD(keyword,{$holder}), {$holder}) WHERE keyword IN ({$holder})"; $ret = $this->query($sql, $fields); }
コメント