2012-01-27 3 views
3

t이 mysql 테이블이고 n이 정수형 열이되도록합시다. 다음 쿼리를 수정하여 표현식 n - 10을 한 번만 계산하면됩니다.mysql update 문의 사용자 변수

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

쿼리는 나도 알아,하지만 난 10 값과 5는 PHP 변수가 될 것이다 실제 프로그램에서 동일한 패턴을 사용합니다, 이해가되지 않습니다.

+0

당신이 무엇을 의미합니까 번만 정확히 계산? – JohnFx

+0

왜 그런지 신경 써야 하나? 실제로 결과를 DB에 쓰는 데 수백만 배 더 빨라질 것입니다. –

+0

이제는 if가 두 번 계산됩니다 (if의 모든 항목에 대해). @tmp : = n-10과 같은 사용자 변수에 할당 할 때 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