2012-04-20 5 views
-4

내가 어떤 가치와 값에 대해 검사 할 필요가 일치하는 항목이있는 경우 교체 될 필요가있는 테이블에 많은 열 ..MySQL의 업데이트 값이

그래서 기본적으로 내가 찾고 있어요 한을 '램'을 말할 수있는 모든 열 변수의 일종으로 열 이름을 취하고 테이블을 반복하며 일치하는 경우 열 값을 업데이트하는 쿼리입니다.

필자는 열과 같은 쿼리를 많이 사용하여 PHP로 처리 할 수 ​​있습니다.하지만 그렇지 않습니다. ~

ps 나는 그에게 나쁜 디자인을 알고, 일반적인 경우 이러한 요구 사항은 발생하지 않습니다,하지만 슬프게도 그것이 무엇인지입니다 ..

+4

일반 UPDATE WHERE 명령이 작동하지 않는 이유는 무엇입니까? 나는 혼란스러워. –

+0

문자열 값, 비교할 값 및 바꾸기 값의 예를 제공하십시오. –

+4

테이블 구조에 대한 메타 쿼리와 찾을 열/값에 대한 내부 쿼리는 어떻게됩니까? – Hajo

답변

6

에 쿼리 :

UPDATE tableX 
SET col_1 = 'newvalue' 
WHERE col_1 = 'ram'; 

UPDATE tableX 
SET col_2 = 'newvalue' 
WHERE col_2 = 'ram'; 

... 

UPDATE tableX 
SET col_N = 'newvalue' 
WHERE col_N = 'ram'; 

UPDATE tableX 
SET col_1 = CASE WHEN col_1 = 'ram' 
        THEN 'newvalue' 
        ELSE col_1 
       END 
    , col_2 = CASE WHEN col_2 = 'ram' 
        THEN 'newvalue' 
        ELSE col_2 
       END 
    ... 

    , col_N = CASE WHEN col_N = 'ram' 
        THEN 'newvalue' 
        ELSE col_N 
       END 
; 

문 하나에서 당신은 손으로 또는 (열 및 테이블이 너무 많은 일을 할 경우) 동적 SQL로 문을 작성할 수 있습니다.

+0

열 이름을 모르는 데이터베이스에서 어떻게이 작업을 수행 할 수 있습니까? –

+0

@BenLobaugh는 DBMS (MySQL, SQL-Server, Oracle, Postgres)에 따라 달라집니다. –

1
UPDATE tablename SET columnname = 'newvalue' WHERE columnname = 'currentvalue'; 

UPDATE

이 PHP 스크립트는 각 열 이름을 통과하고 적용됩니다 많은 문에

<?php 
$result = mysql_query("SHOW COLUMNS FROM tablename "); 
while ($row = mysql_fetch_assoc($result)) { 
    mysql_query("UPDATE tablename SET ".$row['field']." = 'newvalue' WHERE ".$row['field']." = 'currentvalue'"); 
} 
?> 
+0

그게 전부 였어 .dats 칼럼 특정. .. 내 테이블의 모든 칼럼에 대해 최상위 칼럼을 실행하고 싶다. –

+2

이 칼럼을 쿼리에 적용하기 만하면된다. PHP를 사용하면 훨씬 빠를 것입니다. –

+0

dat ... cloumn 'a'의 값이 'b'이면 'a'를 .. 모든 열에 대해 같은 방식으로 변경하십시오. –

0

http://dev.mysql.com/doc/refman/5.5/en/show-table-status.html

당신은 PHP의 테이블 구조를 가져온 다음 변경 일치하는 데이터와 모든 열을 업데이트 결과에서 하나 개의 업데이트 명령을 구축하는 테이블 표시 상태 ... 명령을 사용할 수 있습니다.

그것의 가능한 단지

0

는 PHP에서 그것을 확인 ... 테이블 표시 STATUS LIKE ... 또는 테이블 표시 상태 이름을 = 사용하여 원하는 표를 얻기 위해, 나는 열의 배열을 만들 것, 값 쌍 쿼리가 문자 그대로의 대답은 아무 소용이 없습니다되는

"UPDATE table SET ".explode(',', $newvalues)." WHERE ".explode(' AND ', $oldarray) 
2

이 다른 잘못된 질문처럼 보일 것이다, 그래서 형태 column=value, 다음, 이전 값에 대한 하나의 새로운 것 하나, 그리고이 배열을 폭발.

이러한 루프가 필요한 경우 데이터베이스 설정이 잘못되었습니다.

하나의 열에는 고유 값이 있어야하며 다른 열과 공유되지 않아야합니다.

일대 다 관계를 구현하려는 경우 이러한 쌍둥이 열을 별도의 테이블에있는 열로 옮겨야합니다.

+1

나는 현명한 디자인이 그러한 쿼리의 필요성을 권장하지 않는다는 것에 동의하지만 종종 설계된 일부 데이터베이스를 실행합니다. 마지막으로 실제로 쿼리 할 패턴과 일치하는 테이블을 찾기 위해 하위 쿼리에서 information_schema를 쿼리해야했습니다. 나는 그것을 바꿀 수 없었기 때문에 나는 그걸로 일해야만했다. –