2010-11-18 6 views
0

Je travaille sur un forum personnalisé et essaye de mettre en place une table pour garder une trace de ce que les utilisateurs ont vu ce que les discussions.Remplacement des enregistrements MySQL?

La table est très simple. thread_id, user_id, thread_view_date.

Chaque fois qu'un utilisateur visualise un thread, il met à jour la table avec les identificateurs thread_id, user_id et view afin que le système sache s'il a vu un thread ou non.

Le problème que j'ai est de remplacer les enregistrements.

A partir de maintenant, il s'agit juste d'ajouter de nouveaux enregistrements. Ainsi, si un utilisateur devait afficher un thread 3 fois, il insérait 3 enregistrements comme étant mis en correspondance avec la mise à jour de l'heure d'affichage de l'ancien enregistrement.

J'utilise actuellement ceci sur la page de fil

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

Quelle serait la meilleure façon de mettre à jour le thread_view_date si l'utilisateur a déjà vu le fil, et sinon de créer un nouveau record?

Merci.

Répondre

2

tout d'abord ajouter à clé unique « thread_id, user_id » paire.

ALTER TABLE forum_threads_views ADD UNIQUE KEY (thread_id, user_id) 

récrire Ensuite, votre requête à celui-ci

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 pour la requête, mais il y a une erreur dans votre clause 'ON DUPLICATE KEY', elle est' UPDATE' et non 'SET'. Et pour éviter un remplacement de variable supplémentaire et utiliser la valeur thread_view_date insérée, j'aurais écrit la clause comme ceci: 'ON DUPLICATE KEY UPDATE' thread_view_date = VALUES (thread_view_date) '. –

+0

Le seul problème que j'ai avec cela après quelques tests est qu'il met à jour les anciens enregistrements si vous affichez un autre thread. Doit faire une nouvelle entrée pour chaque thread. – Cory

+0

J'ai compris. il n'a pas été apparié correctement. CLÉ UNIQUE thread_id (thread_id, user_id) – Cory

Questions connexes