2011-03-31 5 views
3

다음 쿼리를 변경하여 최신 날짜 값으로 레코드를 업데이트하는 경우 레코드가 이미 존재하는지 확인하는 쉬운 방법이 있습니까?오늘 날짜 레코드가 이미 존재하는 경우 업데이트하십시오.

mysql_query("INSERT INTO daily_record (PageID, count) 
      VALUES (".$array['page_id'].",".$array['count'].")"); 

내가 확인하고 싶은 열은 CURRENT_TIMESTAMP 필드 (record_date는 - daily_record 테이블의 일부) 인 오늘 날짜가 페이지 id이있는 경우 다음 업데이트는 새로운 삽입보다는 일이 필요합니다.

누군가가 놀라워 할 수 있다면 도와주세요!

+0

'record_date'는 같은 테이블 ('daily_record')에 있습니까? 날짜가 존재하는지, 아니면 오늘 날짜인지 의미합니까? (나는 어쨌든 당신이 테이블을 정리하지 않는 한 어제도 존재한다고 상상할 것입니다.) – Rudu

+0

예 record_date는 daily_record에 있습니다. 오늘 날짜 인 경우 업데이트하십시오. 나는 아직도 전날의 역사 기록을 지킬 필요가있다. 좋은 지적 ... :) –

답변

1

는이 같은 daily_record 테이블을 구축 잘 경우

INSERT INTO daily_record (
    pageID,record_date,`count` 
) VALUES (
    1,'2011-03-31',32 
) ON DUPLICATE KEY UPDATE `count`=32; 

분명히 페이지 id/record_date/count는 호출 코드에 의해 제공됩니다. 이렇게하면 주어진 count로 pageID/day에 대한 레코드를 효과적으로 생성하거나 pageID/day에 대한 레코드가 이미있는 경우 제공된 값으로 카운트를 설정합니다.

DATE 열 유형을 사용하면 무료 타임 스탬프가 표시되지 않지만 시간/분/초는 신경 쓰지 않으므로이 테이블에 대해서는 그리 유용하지 않습니다.

여기서 핵심은 PRIMARY KEY... 행으로 생성 된 고유 색인입니다. 고유성이 삽입에 의해 위반되는 경우 업데이트가 대신 발생할 수 있습니다.

+0

매우 영리하다! 그럴거야. –

+0

BTW 내가 행의 수가 페이지 수보다 훨씬 큰 경우 (예 : 1000 행의 데이터, 10 페이지) 특정 페이지에 대한 레코드를 검색하려는 가정하에 'INDEX idxPageID (pageID) 이 인덱스는 스쿼트 (어쨌든 전체 테이블 스캔)를 수행하지 않으므로 모든 솔루션을 삭제하십시오. 솔루션에는 필요하지 않습니다. – Rudu

0

베스트 나는 그것이 0으로 돌아 오면 미리의 실존을 확인하거나 먼저 update 문을 실행, @@rowcount을 (기록에 영향을) 확인 insert을 할 수있는 selectif ... then로를 사용 중입니다 가지고 올 수)

즉 제

0

[편집 -이 그것 때문에 DATE 일의 처음에 보였다보다 조금 더 복잡하다.]

당신은 업데이트 할 수를 얻을해야 레코드를 업데이트하려면 따라서 SELECT를 먼저 사용해야합니다. 그러나 현재 날짜에 대해서만 레코드를 선택해야합니다.

오늘 $로 오늘 날짜를 가져 오는 코드를 작성했다고 가정 해 봅시다.

CREATE TABLE daily_record (
    pageID INT, 
    record_date DATE, 
    count INT, 
    PRIMARY KEY (pageID,record_date), 
     INDEX idxPageID (pageID) 
) 

그런 다음 명령을 사용할 수 있습니다 : 켄드릭 말했듯이 그런

,

 
$result=mysql_query("SELECT * from daily_record where PageID=\'$array['page_id']\' and date_field BETWEEN '$today'.' 00:00:00' AND '$today'.' 23:59:59'"); 

if (!$result) 
    { mysql_query("INSERT into daliy_record (PageID,count} VALUES (\'$array['page_id']\',\'$array['count']\')"); } 
else 
    {mysql_query("UPDATE daily_record (count) VALUES (\'$array['count']\') where PageID=\'$array['page_id']\' and date_field=\'$result['date_field']\'");} 
관련 문제