문제

테이블을 업데이트하기 위해 PHP에서 SQL 쿼리를 만들려고합니다. 다른 것을 가질 수 있습니까? WHERE 영향을받는 각 행에 대한 조항?

eg와 같은 것 :

UPDATE table 
SET val=X WHERE someproperty = 1,
SET val=Y WHERE someproperty = 2

등?

모든 도움이 감사합니다. 감사

도움이 되었습니까?

해결책

SQL 명령문에 대한 조항이 여러 곳을 가질 수는 없지만 Case 문을 사용하여 수행하려는 작업을 수행 할 수 있습니다. 다른 옵션은 여러 업데이트 문을 실행하는 것입니다.

다음은 CASE 문을 사용하는 샘플입니다.

UPDATE table
SET val = (
    CASE someproperty
        WHEN 1 THEN X
        WHEN 2 THEN Y
        ELSE val
    END
);

다음은 여러 업데이트 문을 사용하는 샘플입니다.

UPDATE table SET val=X WHERE someproperty = 1;
UPDATE table SET val=Y WHERE someproperty = 2;

다른 팁

예, 사례 명세서와 함께 할 수 있습니다.

UPDATE table
SET val = CASE someproperty  
           WHEN 1 THEN x 
           WHEN 2 THEN y
           ....
          ELSE
           val
          END

이제 그 걱정이 있습니다 CASE 여러와 비교할 때 진술은 읽기 어려워집니다 UPDATE 진술. 여기에는 유효한 주장이 있습니다. 예를 들어, 1000 행이 업데이트되면 몇 가지를 사용하는 것이 더 좋습니다. UPDATE 단일에 대한 1000 개의 다른 조건이 아닌 진술 CASE.

그러나 때로는 사례 진술이 더 적합합니다. 예를 들어, 일부 특성을 기준으로 행을 업데이트하고 있다면 필드의 가치의 짝수 또는 홀수 특성을 테이블로 말하면 CASE 진술은 엄청나게 간결하고 관리 가능한 방법입니다. UPDATE 모두 특정 유형의 논리를 공유하는 진술. 예를 들면 다음과 같습니다.

UPDATE table
SET val = CASE MOD(someproperty, 2)  
           WHEN 0 THEN x 
           WHEN 1 THEN y
          END

이 표현식은 약간의 프로페티의 계수를 취하고 0 (짝수)이 value x를 val에 할당하고 1 (홀수)을 할 때 value y를 val에 할당합니다. 이 명령문에 의해 업데이트되는 데이터의 양이 클수록 클리너는 여러 가지와 비교됩니다. UPDATE 진술.

요컨대, CASE 진술은 때때로 읽기 쉬운/유지 관리 가능합니다 UPDATE 진술. 그것은 모두 당신이 그들과 함께하려고하는 것에 달려 있습니다.

편집하다: 추가 안전을 위해 다른 조항을 추가했습니다. OP는 특정 행만 업데이트하는 데 관심이 있으므로 나머지는 업데이트 전에 유지해야합니다.

편집하다: 시나리오를 추가했습니다 CASE 진술은 다중보다 더 효과적인 접근법입니다 UPDATE 진술.

아니요. 두 가지 업데이트를 만드십시오.

UPDATE table SET val=X WHERE someproperty = 1;
UPDATE table SET val=Y WHERE someproperty = 2;

두 번째 생각에, 당신은 하위 쿼리 또는 사례 진술을 사용할 수 있습니다 ...

UPDATE table SET val= ( case when someproperty = 1 then X when someproperty = 2 then Y else val END )

다음과 같은 하위 쿼리를 만들어야 할 수도 있습니다.

UPDATE table t1 SET val = ( select CASE when someproperty = 1 then X when someproperty = 2 then Y ELSE val END from table t2 where t1.primarykey = t2.primary key )
UPDATE TABLE
SET VAL CASE SOMEPROPERTY WHEN 1 THEN X WHEN 2 THEN Y END

작고 쉽게 확장 가능한 방법 :

UPDATE table1 SET val=ELT(FIND_IN_SET(someproperty, '1, 2'), X, Y);

이 방법으로 쿼리를 만드십시오.

$condition = array(1, 2);
$newvals = array('X', 'Y');
$query = "UPDATE table1 SET val=ELT(FIND_IN_SET(someproperty, '". implode(',', $condition). "', ". implode(', ', $newvals). ")";

문자열 값을 처리하는 경우 SQL 구문 오류를 피하려면 repay_Query를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top