пользовательские переменные в операторе обновления mysql - PullRequest
3 голосов
/ 27 января 2012

Пусть t будет таблицей mysql, а n будет целочисленным столбцом в ней. Мне было бы интересно, если следующий запрос можно изменить так, чтобы выражение n - 10 вычислялось только один раз.

UPDATE t SET n = if(n - 10 < 1, 1, n - 10) WHERE n = 5;

Запрос не имеет смысла, я знаю, но мне нужно использовать тот же шаблон в реальном приложении, где значения 10 и 5 будут переменными php.

Ответы [ 2 ]

4 голосов
/ 27 января 2012

Хорошо, я наконец нашел правильный синтаксис.Скобки вокруг @tmp := n - 10 имеют решающее значение.

UPDATE t SET n = if((@tmp := n - 10) < 1, 1, @tmp) WHERE n = 5;
0 голосов
/ 27 января 2012

Вы можете просто сделать такую ​​логику в php:

$value = $n - 10;
$value = $value < 1 ? 1 : $value;
$sql = "UPDATE t SET n = $value WHERE n = $n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...