2012-01-27 5 views
3

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

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

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

+0

Что вы имеете в виду вычисляется только один раз точно? – JohnFx

+0

Почему вас это волнует. Это будет в миллионы раз быстрее, чем собственно запись результата в БД. –

+0

Ну, теперь он вычисляется дважды (для каждого случая в if). Я хочу, чтобы выражение n-10 было только один раз - при назначении переменной пользователя следующим образом: @tmp: = n - 10. Но я не знаю точного синтаксиса. – clime

ответ

3

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

UPDATE t SET n = if((@tmp := n - 10) < 1, 1, @tmp) WHERE n = 5; 
+0

Спасибо, я пытался сделать эту точную вещь, и добавление круглых скобок заставило ее работать. –

0

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

$value = $n - 10; 
$value = $value < 1 ? 1 : $value; 
$sql = "UPDATE t SET n = $value WHERE n = $n"; 
+1

Спасибо, но я, возможно, упростил свой пример. На самом деле, мне нужно получить полученное значение n на основе других столбцов в таблице. – clime

Смежные вопросы