Je suis en train de réaliser exactement ce qui est expliqué ici: La création d'un filetée système de messagerie privée comme facebook et gmail, toutefois, je n'ai pas complètement comprendre Joel Brown réponse. quelqu'un peut-il expliquer.
C'est ce que mon db tables avec les données de l'échantillon (je suppose que je l'ai rempli correctement à des fins de démonstration):
J'ai besoin d'afficher une liste de threads basé sur l'identifiant de connexion (les plus récents en haut) ce qui serait la requête ressemble à LINQ? (ce que je vous demande est dans un groupe de fils de message, donnez-moi la 1 nouveau message dans chaque thread) - tout comme cela est fait sur facebook.
J'ai besoin d'afficher TOUS les messages dans un fil de messages (LINQ) -> tout comme c'est fait sur facebook où vous cliquez sur le message et vous verrez l'ensemble de la "conversation" dans la bande de roulement.
S'il vous plaît aider! merci
EDIT -> poursuite Joel, est-ce correct??
Joel, je suis un peu confus, pouvez-vous nous expliquer (les commentaires/questions en gras):
L'idée ici est que chaque fois qu'un utilisateur démarre une nouvelle marque thread/message, il commence avec un nouveau record dans le FIL de la table. L'utilisateur est ensuite ajouté comme une THREAD_PARTICIPANT et le contenu du message est ajouté à un MESSAGE qui renvoie à l'contenant THREAD. La FK à partir d'un MESSAGE à l'UTILISATEUR indique l'auteur du message.
LoginId 1 envoie un message à LoginId2 => nouvel enregistrement est inséré à MessageThread table. Également un enregistrement est inséré à MessageThreadParticipant enregistrement avec MessageThreadId = 1, LoginId = 1 (l'expéditeur). Et un nouvel enregistrement est inséré dans la table Message avec MessageId =1, MessageThreadid =1, SenderLoginId = 1 (exact?)
c'est ce que j'ai après cette itération:
Je pense que je suis confus car il n'existe aucun moyen pour Loginid 2 à savoir qu'il y a un message pour lui. ?? OU peut-être que j'ai besoin d'insérer 2 enregistrements dans MessageThreadParticipant?? (l'émetteur et le récepteur)-> de cette façon, peut voir l'ensemble de la "conversation"??
EDIT2: Joe, je pense que je pourrais faire ceci:
SELECT
Message.MessageId, Message.CreateDate, Message.Body, Login.Username, Message.SenderLoginId
, (SELECT MessageReadState.ReadDate
FROM MessageReadState
WHERE MessageReadState.MessageId = Message.MessageId
) as ReadDate
FROM Message
INNER JOIN Login ON Message.SenderLoginId = Login.LoginId
INNER JOIN MessageThreadParticipant mtp on mtp.MessageThreadId = Message.MessageThreadId
AND ( Message.MessageId in
( SELECT Max(Message.MessageId)
FROM MessageThreadParticipant INNER JOIN Message
ON MessageThreadParticipant.MessageThreadId = Message.MessageThreadId
GROUP BY MessageThreadParticipant.MessageThreadId
)
)
Where mtp.LoginId = 2
ORDER BY Message.CreateDate DESC;
S'il vous plaît corrigez-moi si je me trompe :)