2014-11-21 3 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

Вы используете одинарные кавычки имена столбцов. Я считаю это типографской ошибкой и голосую за закрытие таких вопросов. –

+0

изменено на двойные кавычки, но не помогло ... – Basil

+0

Извините @GordonLinoff Linoff, пожалуйста, объясните, как я могу исправить мою типографскую ошибку в этом случае – Basil

ответ

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'); 

Не используйте кавычки для имен столбцов, если вы действительно не должны. И если вам нужно, то измените имена, так что вам не нужно.

EDIT:

Вы также можете написать это как:

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; 
Смежные вопросы