2009-06-08 8 views
0

Hey. je suis en train d'écrire un forum, et j'ai ce tableau qui marque les messages d'un utilisateur spécifique lu:Problème d'écriture de cette requête dans mysql (marquage des messages lus dans un forum)

`read_messages`(`message_id`,`user_id`) 

une version simplifiée du tableau des messages:

`messages`(`id`,`forum_id`,`author_id`) 

maintenant, je veux être en mesure, quand récupérer les données de message de la base de données pour un forum donné, pour ajouter une variable qui me dira si l'utilisateur actuel a lu ce message ou pas. Je sais comment faire ceci avec 2 requêtes (le premier je récupère tous les messages, puis je vérifie pour chacun d'eux si l'utilisateur les a lues), mais aucune idée quant à la façon de les joindre ensemble. des idées?

Répondre

2
SELECT messages.*, read_messages.id as read_id 
FROM messages 
LEFT OUTER JOIN read_messages 
    ON (messages.id = read_messages.message_id AND read_messages.user_id = [ USER ID ]) 

Si read_id est retourné comme un nombre> 0 plutôt que NULL, le message a été lu parce qu'il ya un enregistrement correspondant à read_messages pour cet utilisateur.

0

Il semble que vous recherchiez une jointure externe, consultez la Outer Joins Section pour la syntaxe, qui vous permet de sélectionner toutes les valeurs d'une table et NULLS où les valeurs n'existent pas.

Questions connexes