#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.html3. @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) >