在MySQL中运行2更新查询

时间:2014-01-16 16:10:30

标签: php mysql sql

我有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个值,那将非常困难。

2 个答案:

答案 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}