2010-11-18 90 views
0

我正在開發一個自定義論壇,並試圖設置一個表來跟蹤用戶查看了哪些線程。替換MySQL記錄?

表格很簡單。 thread_id,user_id,thread_view_date。

每次有人查看某個線程時,它都會使用thread_id,user_id和查看日期更新表,以便系統知道他們是否查看了線索。

我遇到的麻煩是更換記錄。

截至目前,它只是添加新的記錄。所以如果一個用戶要查看一個線程3次,它會插入3條記錄來更新舊記錄的查看時間。

我目前使用此線程頁

$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); 

什麼將更新thread_view_date如果用戶已經觀看線程最簡單的方法,如果沒有創造新紀錄嗎?

謝謝。

回答

2

首先添加獨特的鑰匙「的thread_id,USER_ID」對。

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

+1的查詢,但在錯誤你的'ON DUPLICATE KEY'子句,它是'UPDATE'而不是'SET'。爲了避免額外的變量替換並使用插入的thread_view_date值,我會寫下如下的子句:ON DUPLICATE KEY UPDATE thread_view_date = VALUES( thread_view_date)' – 2010-11-18 18:57:45

+0

我經過一些測試後遇到的唯一問題是如果您查看不同的線程,它會更新舊記錄的時間。需要爲每個線程創建一個新條目。 – Cory 2010-11-18 21:42:41

+0

明白了。它沒有正確配對。 UNIQUE KEY thread_id(thread_id,user_id) – Cory 2010-11-18 22:35:54