2

我有两行要更新,列是meta_keymeta_value。有meta_key两行我要过滤,它是first_nameand last_name。我想更新,meta_value但它被first_nameand过滤了last_name。我的查询是这样的:

UPDATE 
  `wp_usermeta` 
SET 
  (`meta_value` = 'First Name' WHERE `meta_key` = 'first_name'), 
  (`meta_value` = 'Last Name' WHERE `meta_key` = 'last_name') 
WHERE `user_id` = (SELECT `user_id` FROM (SELECT MAX(`user_id`) AS `user_id`
FROM `wp_usermeta`) AS `reg`)

请帮助我..提前谢谢!

4

2 回答 2

1

您只需要一级子选择。

UPDATE `wp_usermeta`
   SET `meta_value` = IF(`meta_key` = 'first_name', 'First Name',
                      IF(`meta_key` = 'last_name', 'Last Name',
                         `meta_value`))
 WHERE `user_id` = (SELECT MAX(`user_id`) FROM `wp_usermeta`)
   AND (`meta_key` = 'first_name' OR `meta_key` = 'last_name')

或者,您可以像大多数人一样只使用两个单独的查询。

UPDATE `wp_usermeta`
   SET `meta_value` = 'First Name'
 WHERE `user_id` = (SELECT MAX(`user_id`) FROM `wp_usermeta`)
   AND `meta_key` = 'first_name';
UPDATE `wp_usermeta`
   SET `meta_value` = 'Last Name'
 WHERE `user_id` = (SELECT MAX(`user_id`) FROM `wp_usermeta`)
   AND `meta_key` = 'last_name';
于 2012-09-25T02:28:18.077 回答
1

你为什么不以这种方式更新

UPDATE `wp_usermeta` 
SET `meta_value` = 'First Name' 
WHERE `meta_key` = 'first_name' 
  AND `user_id` = (SELECT `user_id` FROM (SELECT MAX(`user_id`) AS `user_id` FROM `wp_usermeta`) AS `reg`)

UPDATE `wp_usermeta` 
SET `meta_value` = 'Last Name'
WHERE `meta_key` = 'last_name'
  AND `user_id` = (SELECT `user_id` FROM (SELECT MAX(`user_id`) AS `user_id` FROM `wp_usermeta`) AS `reg`)
于 2012-09-25T02:28:37.897 回答