2010-11-18 12 views
0

私はカスタムフォーラムで作業しており、どのスレッドをどのユーザーが見たのかを把握するためにテーブルを設定しようとしています。MySQLレコードを置き換える?

テーブルは非常にシンプルです。 thread_id、user_id、thread_view_date。

誰かがスレッドを表示するたびに、thread_id、user_id、およびビューの日付でテーブルを更新し、システムがスレッドを見たかどうかを知るようにします。

私が抱えている問題は、レコードを置き換えることです。

今のところ、新しいレコードを追加するだけです。したがって、ユーザーがスレッドを3回見た場合、古いレコードの表示時間を更新するために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

まず第一には、「ペアをUSER_ID、thread_idは」に一意のキーを追加します。

ALTER TABLE forum_threads_views ADD UNIQUE KEY (thread_id, user_id) 

次にクエリのこの1

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) '。 –

+0

いくつかのテストの後に私がこれを持っている唯一の問題は別のスレッドを表示すると古いレコードの時刻を更新します。スレッドごとに新しいエントリを作成する必要があります。 – Cory

+0

入手しました。正しくペア設定されていませんでした。 ユニークキーthread_id(thread_id、user_id) – Cory

関連する問題