2009-08-02 8 views
2

Qu'est-ce qu'un moyen efficace pour afficher une liste avec des messages non lus dans un forum? Il est possible de suivre l'utilisateur et de consigner chaque message qu'il visite et de l'enregistrer dans une nouvelle table. Je pense que ce n'est pas très efficace. Quel est un moyen plus efficace de le faire?Comment faire une liste de sujets non lus avec mysql

Répondre

2

Si vous voulez vraiment faire cela, vous pourriez avoir une table

UserVisit: user_id, topic_id, last_visited_at 

quelle table vous mettez à jour chaque fois qu'un utilisateur ouvre un sujet. Ensuite, vous pouvez sélectionner les rubriques dont l'ID ne figure pas dans ce tableau ou dont un post a été ajouté après last_visited_at. Quelque chose comme:

SELECT * 
FROM Topic 
WHERE Topic.id NOT IN (SELECT topic_id FROM UserVisit WHERE user_id = $user_id) 

UNION 

SELECT * 
FROM Topic 
LEFT JOIN UserVisit ON Topic.id = UserVisit.topic_id 
WHERE user_id = $user_id 
AND UserVisit.last_visited_at < Topic.last_post_at 

Mais je suggère qu'au lieu de cela, vous présentez seul l'utilisateur avec le sujet qui ont de nouveaux messages depuis votre dernière visite de l'utilisateur sur le site. Si vous faites cela, vous n'avez pas du tout besoin de ce tableau, vous pouvez interroger des sujets tels que:

SELECT * 
FROM Topic 
WHERE Topic.last_post_at > $users_last_visit 
Questions connexes