mysql 批量更新多条记录的方法:
UPDATE mytable SET myfield = CASE id WHEN 1 THEN 'value' WHEN 2 THEN 'value' WHEN 3 THEN 'value' END WHERE id IN (1,2,3)
这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。
这样一条sql语句就可以实现多数据多字段的更新了!
/**
* 分页批量更新点播评论数
* @author wzq
*/
public function update_video_comment()
{
// 分页批量更新点播表里面每个视频的评论字段
$count = $this->_getCountVideoComment();
$limit = 1000; // 分页数
if(!empty($count)) {
$total = count($count);
$cur = 0;
$startInfo = ''; // 日志用
while ($cur < $total)
{
$commentData = $this->_getVideoComment($cur, $limit); // 分类汇总查询出每条有评论的点播评论数和视频id
$videoIds = '';
$when = '';
foreach ($commentData as $key => $value) {
$videoIds .= "," . $value['video_id'];
$when .= " WHEN " . $value['video_id'] . " THEN " . $value['c'];
}
$videoIds = substr($videoIds, 1);
$updateSql = "UPDATE video_info SET review_num = CASE id $when END WHERE id IN ( $videoIds )";
$this->exec($updateSql);
$cur += $limit;
$startInfo .= json_encode($commentData[0]) . ',';
}
// 记录日志
$this->CI->load->library('Mlog');
$msg = "更新视频评论总条数: $total ; 每次分页数: $limit ; 每页起始视频id: " . $startInfo;
$this->CI->mlog->Info(__LINE__, $msg, 'update_video_comment');
}
}推荐日志展现形式:














