Запрос с переменными в MySQL

#php #mysql

#php #mysql

Вопрос:

Я пишу на PHP, и у меня возникли некоторые проблемы с переменными в запросе MySQL. В частности, я пытаюсь передать значение из запроса ВЫБОРА в запрос ОБНОВЛЕНИЯ.

Запрос, который я выполняю, является:

 $queryUpddateMinimumSaving = '
    SELECT 
        @monthlyVal:= monthlyValue,
        @fixedElementType:= codElementType,
        @username:= username
    FROM fixedElement
    WHERE codElement = '.$codFixedElement.';

    UPDATE bankAccount SET
    IF(
        @fixedElementType = 1,
        minimumSaving = IF((minimumSaving - @monthlyVal) >=0,
            minimumSaving - @monthlyVal,
            0
        )
        minimunSaving = minimumSaving   @monthlyVal
    )
    WHERE username = @username
;';
  

Даже при выполнении запроса в phpMyAdmin запрос не работает.
MySQL показывает мне эту ошибку:

#1064 — У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘IF( @fixedElementType = 1, minimumSaving = IF((minimumSaving -‘ в строке 2

Но я не понимаю, что я делаю не так ^^» Я смотрю в документе MySQL, и запрос выглядит правильно

Можете ли вы мне помочь? Спасибо

Комментарии:

1. В чем смысл выбора?

2. После SET того, как MySQL ожидает обновления списка имен столбцов и установки новых значений. dev.mysql.com/doc/refman/5.7/en/update.html

3. @strawberry — мне нужно значение выбранных строк. Могу ли я получить их с помощью MySQL или мне нужно сохранить их в переменных PHP, а затем запустить запрос ОБНОВЛЕНИЯ с переменными PHP?

4. @SeeoX итак, я должен поместить вложенный IF после имени столбца, верно? Вот так: ОБНОВИТЬ банковский счет, УСТАНОВИТЬ минимальное сохранение = ЕСЛИ (условие, ЕСЛИ (условие, …) …)

5. У вас не может быть двух запросов в одном операторе. Вам нужно запускать их отдельно. Я бы, вероятно, пошел с объединением по этому вопросу.

Ответ №1:

Вы можете использовать один запрос для этой проблемы:

 UPDATE bankAccount 
JOIN fixedElement ON fixedElement.username = bankAccount.username
SET
    minimunSaving = IF(
        codElementType = 1,
        GREATEST(minimumSaving - monthlyValue, 0),
        minimumSaving   monthlyValue
    )
WHERE codElement = '.$codFixedElement.';
  

Комментарии:

1. Спасибо, это работает! 😀 Вы просто забыли «,» после <НАИБОЛЬШЕЕ (минимальное сохранение — месячное значение, 0) >