バルクアップデート

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

コメント

タイトルとURLをコピーしました