我有2个更新查询,我想将它们组合成一个查询。有没有办法做到这一点?
查询1:
update user_meta set
meta_value = case meta_key
when 'mobile' then '{$mobile}'
when 'interest' then '{$interest}'
when 'occupation' then '$occupation'
when 'address' then '{$address}'
when 'city' then '{$city}'
when 'country' then '{$country}'
when 'about' then '{$about}'
when 'website' then '{$website}'
else meta_value
end
where userid = {$id}
另一个问题:
update user set fullname='{$fullname}' where userid={$id}
这两个查询在同一个函数中同时执行,但具有不同的表。此外,这种方式我必须运行两个更新查询。
如果我想将语句放入循环中,该怎么办?如果要更新100个值,那将非常困难。
答案 0 :(得分:1)
MySQL支持在单个update
中更新多个表:
update user_meta um join
`user` u
on um.userid = u.userid and
u.userid = {$id}
set um.meta_value = (case um.meta_key
when 'mobile' then '{$mobile}'
when 'interest' then '{$interest}'
when 'occupation' then '$occupation'
when 'address' then '{$address}'
when 'city' then '{$city}'
when 'country' then '{$country}'
when 'about' then '{$about}'
when 'website' then '{$website}'
else meta_value
end),
u.fullname = '{$fullname}';
答案 1 :(得分:1)
可以在一个语句中更新多个表。
例如:
UPDATE user u
JOIN user_meta m
ON m.userid = u.userid
SET m.meta_value = CASE m.meta_key
WHEN 'mobile' THEN '{$mobile}'
WHEN 'interest' THEN '{$interest}'
WHEN 'occupation' THEN '{$occupation}'
WHEN 'address' THEN '{$address}'
WHEN 'city' THEN '{$city}'
WHEN 'country' THEN '{$country}'
WHEN 'about' THEN '{$about}'
WHEN 'website' THEN '{$website}'
ELSE m.meta_value
END
, u.fullname = '{$fullname}'
WHERE u.userid = {$id}