大量のアップデート文を流すときに
速度改善で役立つ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);
}

コメント