2012-09-10 7 views
1

업데이트 표 contracts의 값은 contracts_history의 값으로, id가 다른 것과 같은 테이블이 필요합니다.다른 테이블의 다른 행의 값으로 같은 행 ID의 값으로 행

나는이 코드를 작성하지만 작동하지 :

function recover_contract($contract_id) 
{ 
$sql = "UPDATE contracts SET ROW = (SELECT * FROM contracts_history WHERE contracts.ID = contracts_history.ID)"; 
$result = $this->update($sql); 
return $result; 
} 

UPDATE :
이 코드

update 
contracts a, 
contracts_history b 
set 
a.name_surname=b.name_surname 

을 사용 하지만 내 테이블 (64) 구조 복사에 대한 어떤 해결책이 아니다 있습니다 모든 유형의 구조를 가진 모든 데이터? 이 있어야합니다

$sql = "INSERT INTO `contracts_history` SELECT * FROM `contracts` 
     WHERE id='$contract_id'"; 

답변

2

구문입니다. 이 같은 조건을 추가 할 수 있습니다

update 
    contracts a, 
    contracts_history b 
set 
    a.col1=b.col1, 
    a.col2=b.col2 
where 
    a.id=b.id 
    and a.id=3 
+0

이 코드를 correnctly 사용할 수 있습니다. –

2

당신은 당신의 쿼리로 이것을 사용해 볼 수 있습니까?

$sql = "UPDATE contracts c 
     LEFT JOIN contracts_history h ON c.ID = h.ID 
     SET WHAT_YOU_WANT"; 
+0

@Giez 안녕, 난 그냥 좀 더 명확하게하기위한 코드 포맷 : D –

+0

좋아, 작은 업데이트 할 수 있지만 큰 기능 : D 감사 남자 ... –

2

하나의 열로 업데이트하므로 subquery은 하나의 값만 반환해야합니다.

시도,

UPDATE contracts 
SET ROW = (SELECT columnName 
      FROM contracts_history 
      WHERE contracts.ID = contracts_history.ID 
      LIMIT 1) 

또는 사용하여 1

확인 JOIN

UPDATE contracts a 
     INNER JOIN contracts_history b 
     ON a.ID = b.ID 
SET a.row = b.columnName 

UPDATE를 사용하여. 그래서 여기에, 하위 쿼리에서 값을 사용하여 업데이트하는 첫 번째 유형에 대해, 나는 하나의 열을 여러 값으로 업데이트 할 수 없기 때문에 select 문에 LIMIT을 추가했거나 그렇지 않으면 오류 메시지가 나타납니다. 두 테이블을 결합하는 두 번째 부분에서 a.ID = b.ID은 두 테이블의 관계입니다. 이것은 테이블이 서로 어떻게 관련되는지 정의합니다. SET a.row = b.columnName, columnName은 기본적으로 테이블 contracts_history에있는 값의 원본입니다. 하지만 그 메모

update 
    contracts a, 
    contracts_history b 
set 
    a.col1=b.col1, 
    a.col2=b.col2 
where 
    a.id=b.id 

당신이 역사 테이블에 ALL 행을 업데이트 의미 쿼리에 지정된 ID를 가지고하지, 다음과 같이

+0

이 제대로 –

+0

작동하지를 @ user1659079 어느 것이 올바르게 작동하지 않습니까? –

+0

그것의 전혀 작동하지 않습니다 –

관련 문제