2014-11-21 52 views
0

我想使用一個SQL查詢來改變wp_usermeta一些字段的時候,當我把這個片斷:MySQL的句法顯示錯誤更新用戶配置文件

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並且不太瞭解。

+1

您正在使用周圍的列名的單引號:

你也可以爲寫這篇文章。我認爲這是一個印刷錯誤,並投票結束這些問題。 – 2014-11-21 12:51:13

+0

更改爲雙引號,但沒有幫助... – Basil 2014-11-21 12:57:53

+0

對不起@GordonLinoff Linoff能否請你解釋我該如何解決這個案例中的印刷錯誤 – Basil 2014-11-21 13:03:09

回答

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" 
          ) 
         ) 
-----------------------^ 

(還有一個原因是優秀的程序員是瘋狂的有關格式,它可以防止很多錯誤,像這樣)

的問題是,你錯過了一個關閉paren。你應該寫這個使用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;