mysql如何更新⼀个表中的某个字段值等于另⼀个表的某个字段
值
update a inner join b on a.bid=b.id set a.x=b.x,a.y=b.y ;
(a,b 分别代表两个表)
这⾥使⽤了case when 这个⼩技巧来实现批量更新。
举个例⼦:
1 2 3 4 5 6 7UPDATE categories
SET display_order = CASE id WHEN1 THEN3
WHEN2 THEN4
WHEN3 THEN5
END
WHERE id IN(1,2,3)
这句sql的意思是,更新display_order 字段,如果id=1 则display_order 的值为3,如果id=2 则 display_order 的值为4,如果id=3 则display_order 的值为5。
即是将条件语句写在了⼀起。
这⾥的where部分不影响代码的执⾏,但是会提⾼sql执⾏的效率。确保sql语句仅执⾏需要修改的⾏数,这⾥只有3条数据进⾏更新,⽽where⼦句确保只有3⾏数据执⾏。
如果更新多个值的话,只需要稍加修改:
01 02 03 04 05 06 07 08 09 10 11 12UPDATE categories
SET display_order = CASE id WHEN1 THEN3
WHEN2 THEN4
WHEN3 THEN5
END,
title = CASE id
WHEN1 THEN'New Title 1' WHEN2 THEN'New Title 2' WHEN3 THEN'New Title 3' END
WHERE id IN(1,2,3)
到这⾥,已经完成⼀条mysql语句更新多条记录了。批量更新sql语句
但是要在业务中运⽤,需要结合服务端语⾔,这⾥以为例,构造这条mysql语句:01
02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17$display_order= array(
1 => 4,
2 => 1,
3 => 2,
4 => 3,
5 => 9,
6 => 5,
7 => 8,
8 => 9
);
$ids= implode(',', array_keys($display_order));
$sql= "UPDATE categories SET display_order = CASE id "; foreach($display_order as$id=> $ordinal) {
$sql.= sprintf("WHEN %d THEN %d ", $id, $ordinal);
}
$sql.= "END WHERE id IN ($ids)";
echo$sql;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论