2014-07-08 7 views
0

J'ai un système de messagerie simple, dont les messages doivent maintenant être regroupés par sujet. Donc, la table ressemble à:Groupe SQL par colonnes

id | sender | recipient | subject 
------------------------------------ 
    1 | 16 |  17 | Hello 
    2 | 17 |  16 | Hello 
    3 | 12 |  16 | Hello 

"expéditeur" et "destinataire" sont des identifiants d'une table d'utilisateurs. Ainsi, l'utilisateur doit voir les messages groupés par sujet, ce qui est facile, éventuellement par GROUP BY.

Le problème est que les messages sont groupés, qu'ils ont le même sujet mais d'autres expéditeurs et destinataires. Est-il possible de grouper les messages seulement si l'expéditeur et le destinataire sont les mêmes? Dans l'exemple, les messages 1 et 2 doivent être groupés, mais pas 3. J'ai donc besoin de regrouper sur 2 colonnes.

+0

a) ce que vous avez essayé ?; b) Je pense que l'aide d'une chaîne sujet et sur le regroupement qui est vouée à l'échec - Pensez-y - de nombreux sujets peuvent être identiques Vous devez utiliser un nombre entier et attribuer un nouveau nombre à chaque nouveau fil – user3741598

+0

J'ai essayé de grouper les messages, mais les messagas avec le même sujet mais les autres participants ont été regroupés. Mais maintenant j'utilise une autre solution: j'ai créé une table parent "conversations", les messages sont assignés à une conversation, ce qui rend la manipulation du système de messagerie plus facile – user3817440

Répondre

0

Peut-être ... Je "ne suis pas sûr que je comprends la question tout à fait encore.

Select A.ID, A.Sender, A.Recipient, A.Subject 
FROM tableName A 
LEFT JOIN tableName B 
    on A.Sender=B.Recipient 
AND A.Subject=B.Subject 
Where Sender.ID = USERLOGGEDIN OR B.Recipient = USERLOGGEDIN 
ORDER By Subject, ID 
+0

Je suis en train de tester cela, mais je pense que c'est un gr mangez base, merci! Je pense que vous avez fait une erreur dans la clause Where, vouliez-vous dire: "Où A.Sender = USERLOGGEDIN [...]"? – user3817440