2010-11-18 4 views
0

사용자 지정 포럼에서 사용자가 어떤 스레드를 보았는지 추적하기 위해 테이블을 설정하려고합니다.MySQL 레코드 교체?

테이블은 매우 간단합니다. thread_id, user_id, thread_view_date.

누군가가 스레드를 볼 때마다 thread_id, user_id 및 뷰 날짜로 테이블을 업데이트하므로 시스템은 스레드를 보았는지 여부를 알 수 있습니다.

내가 가지고있는 문제는 기록을 대체하는 것입니다.

지금은 새 레코드를 추가하는 중입니다. 따라서 사용자가 스레드를 세 번 볼 경우 이전 레코드의보기 시간을 업데이트하는 것처럼 3 개의 레코드를 삽입합니다.

나는 현재 새 레코드를 생성 할 경우 사용자가 이미 스레드를 볼 않은 경우 thread_view_date를 업데이트하는 가장 쉬운 방법, 그리고 것이 무엇 스레드 페이지

$viewed_sql = " 
     REPLACE INTO forum_thread_views (
      thread_id, 
      user_id, 
      thread_view_date 
     ) VALUES (
      '$thread_id', 
      '$_SESSION[user_id]', 
      '$date' 
     ) 
    "; 
$viewed_query = @mysqli_query ($db_connect, $viewed_sql); 

에 사용하고?

감사합니다. 모든

답변

2

먼저

ALTER TABLE forum_threads_views ADD UNIQUE KEY (thread_id, user_id) 

그런 다음 쿼리에 대한이 하나

INSERT INTO forum_thread_views (
     thread_id, 
     user_id, 
     thread_view_date 
    ) VALUES (
     '$thread_id', 
     '$_SESSION[user_id]', 
     '$date' 
    ) ON DUPLICATE KEY SET thread_view_date='$date' 
+1

하나에 쿼리를 재 작성. "thread_id, USER_ID '쌍에 고유 키를 추가 할 수 있지만 오류가있다 당신의'ON DUPLICATE KEY' 절은'UPDATE'이고'SET'이 아닙니다. 그리고 추가적인 변수 교체를 피하고 삽입 된 thread_view_date 값을 사용하기 위해, 나는'DUPLICATE KEY UPDATE ON '과 같은 절을 작성했을 것입니다. thread_view_date = VALUES thread_view_date)'. –

+0

몇 가지 테스트를 마친 후이 문제가 유일한 것입니다. 다른 스레드를 볼 경우 이전 레코드 시간을 업데이트합니다. 각 스레드에 대해 새 항목을 작성해야합니다. – Cory

+0

알았어요. 올바르게 쌍을 이루지 못했습니다. UNIQUE KEY thread_id (thread_id, user_id) – Cory