我正在尝试使用sql查询来更改wp_usermeta中的某些字段以及何时放入此代码段:
UPDATE wp_usermeta
SET meta_value = IF("meta_key" = 'first_name', '{firstname}', IF("meta_key" = 'last_name', '{lastname}', "meta_value"))
WHERE user_id =
(SELECT "user_id" FROM
(SELECT MAX("user_id") AS "user_id"
FROM wp_usermeta) AS `reg`)
AND ("meta_key" = 'first_name'
OR "meta_key" = 'last_name')
SQL工作正常。但是,当我想在此代码段中添加新的meta_key时,它会显示错误:
UPDATE wp_usermeta
SET meta_value = IF("meta_key" = 'first_name', '{firstname}', IF("meta_key" = 'last_name', '{lastname}', IF("meta_key" = 'telephone', '{phone}', "meta_value"))
WHERE user_id =
(SELECT "user_id" FROM
(SELECT MAX("user_id") AS "user_id"
FROM wp_usermeta) AS `reg`)
AND ("meta_key" = 'first_name'
OR "meta_key" = 'last_name'
OR "meta_key" = 'telephone')
SQL语法中存在错误 - ;检查与MySQL服务器版本对应的手册,以便在“WHERE
附近使用正确的语法请帮我解决这个问题。我只是开始使用MySQL并且不太了解。
答案 0 :(得分:0)
以下是您的查询的开头:
UPDATE wp_usermeta
SET meta_value = IF("meta_key" = 'first_name', '{firstname}',
IF("meta_key" = 'last_name', '{lastname}',
IF("meta_key" = 'telephone', '{phone}', "meta_value"
)
)
-----------------------^
(有一个原因可以让优秀的程序员对格式化感到疯狂;它可以防止这样的大量错误。)
问题是你错过了一个关闭的人。您应该使用case
(标准SQL)编写此代码:
UPDATE wp_usermeta
SET meta_value = (CASE WHEN meta_key = 'first_name' THEN '{firstname}'
WHEN meta_key = 'last_name' THEN '{lastname}'
WHEN meta_key = 'telephone' THEN '{phone}'
ELSE meta_value
END)
WHERE user_id = (SELECT user_id
FROM (SELECT MAX(user_id) AS user_id
FROM wp_usermeta
) reg
) AND
meta_key IN ('first_name', 'last_name', 'telephone');
除非你真的需要,否则不要使用引号作为列名。如果必须,请更改名称,这样您就不必这样做了。
编辑:
您也可以将其写为:
UPDATE wp_usermeta
SET meta_value = (CASE WHEN meta_key = 'first_name' THEN '{firstname}'
WHEN meta_key = 'last_name' THEN '{lastname}'
WHEN meta_key = 'telephone' THEN '{phone}'
ELSE meta_value
END)
WHERE meta_key IN ('first_name', 'last_name', 'telephone')
ORDER BY user_id DESC
LIMIT 1;