2011-01-26 6 views
1

특정 열이 업데이트 될 때 타임 스탬프를 넣고 싶습니다. 값 dateColumn1 : 날짜, 컬럼이 업데이트 된 2 열 : 값 dateColumn2 :PHP로 특정 열을 업데이트 할 때 MySQL 타임 스탬프

예를

열 1의 경우

날짜 2 열이 나는 기능 getTimestamp()를 사용

를 업데이트했지만, 그렇지 않습니다 작동하는 것 같습니다.

누구나 PHP와 MYSQL에서이 작업을 수행 할 수있는 조언을 해주실 수 있습니까?

감사

답변

1
UPDATE table 
SET column1='new value', timestampcolumn=NOW() 
WHERE ... 

하나의 방법입니다. 레코드의 내용이 업데이트 될 때마다 타임 스탬프가 변경되지 않는다면 원시 "타임 스탬프"필드 유형을 사용하십시오. 그러면 레코드가 삽입되거나 변경 될 때 "now"로 업데이트됩니다.

+0

이와 관련하여 다음을 살펴 보는 것이 좋습니다. http://dev.mysql.com/doc/refman/5.0/en/timestamp.html 타임 스탬프 필드 유형. – Christa

+0

그래서 Timestamp 필드 유형을 사용할 수 없으며 Datetime을 사용해야합니까? –

+0

예, TIMESTAMP는 행의 모든 ​​업데이트에서 필드를 덮어 씁니다. 자신을 제어하려면 DATETIME을 사용하십시오. –

1

나는과 같이, NOW()는 MySQL 함수를 사용하여 선호 : 당신은 단지 데이터베이스에서이 작업을 수행하려면

UPDATE table1 SET column2 = value, dateColumn2 = NOW() WHERE somethingsomething 
+0

열이 DATETIME 또는 TIMESTAMP 여야합니까? –

+0

원하는 작업에 따라 다릅니다. http://dev.mysql.com/doc/refman/5.0/en/timestamp.html –

2

, 당신은 당신의 상태를 확인하고 필요한 경우 특정 타임 스탬프를 업데이트하는 트리거를 작성할 수 . 그러나 나는 당신이 방아쇠를 당기는 것을 원하지 않는다고 가정하고 있습니다. 트리거는 장점이 있습니다. PHP 코드를 작성하지 않고도 행의 이전 값과 새 값에 액세스 할 수 있습니다.

어쨌든, 경우에 당신이 여기 트리거에 대한 몇 가지 예제 코드가 필요 (SQL은 조심) :

 

DELIMITER $$ 
DROP TRIGGER IF EXISTS Table1_UpdateTrigger $$ 
CREATE TRIGGER Table1_UpdateTrigger BEFORE UPDATE ON Table1 
    FOR EACH ROW BEGIN 
    IF OLD.column1 != NEW.column1 THEN 
    SET NEW.dateColumn1 = NOW(); 
    END IF; 
    IF OLD.column2 != NEW.column2 THEN 
    SET NEW.dateColumn2 = NOW(); 
    END IF; 
    END; 
$$ 
DELIMITER ; 
 

Substite 표를 실제 열 이름 등 실제 테이블 이름, 컬럼 1,와.

다른 방법은 PHP의 이전 값과 새로운 값을 비교하는 것입니다. 예 : 이전 데이터를 가져 오는 쿼리를 수행하고 확인하려는 필드를 비교 한 다음 새 타임 스탬프를 설정하기 위해 변경된 필드 당 하나의 업데이트 쿼리를 수행합니다.

0

조건문을 사용하십시오. 예를 들어 다음과 같은 트리거에서 '암호 변경 시간'은 암호 열이 변경된 경우에만 업데이트됩니다.

CREATE TRIGGER update_password 
    BEFORE UPDATE ON users 
    FOR EACH ROW 
    BEGIN 
    IF OLD.password <> NEW.password THEN 
    SET NEW.password_changed_on = NOW(); 
    END IF; 
    END // 
관련 문제