Hello tout le monde,
Ce n'est pas vraiment un problème mais plus un échange de connaissances :).
Donc pas de problème mais un truc m'intrigue.
J'étais tranquillou en train de réaliser une messagerie interne quand je me suis dis que j'allais le faire à la Facebook. Sauf que la contrainte c'est que je ne souhaite pas créer une table Conversation. En réalité, j'aurai uniquement une table Messagerie. Contrairement à Facebook, je ne gère pas les multiples participants, il s'agira juste d'échange de messages entre deux personnes.
Par contre, ces messages seront regroupé dans un même écran sur mobile qui listera à la fois les messages reçu et les messages envoyés.
Du coup je commence.
J'ai une table Message avec
Je remplis ma table de données de test et je cherche à récupérer une liste des messages concernant un membre en particulier (aussi bien en envoi qu'en réception).
J'essaye donc une première requête :
SELECT idSender as expediteur, idReceiver as destinataire, COUNT(messagerie.id)
FROM Message
WHERE idReceiver = 188 OR idSender = 188
GROUP BY expediteur, destinataire
Mais là problème j'ai le retour suivant :
expediteur destinataire COUNT(messagerie.id)
188 283 1
188 328 2
283 188 1
328 188 2
Du coup j'ai bien un groupement avec un count mais j'ai deux lignes à chaque fois qu'un échange à lieu entre deux personnes au lieu d'une seule. Je rappelle que le but est ici de récupérer la liste des conversations existantes d'un membre et le nombre de message associé (envoi + réception).
Du coup, dans un élan d'imagination je tente de remplacer la virgule du GROUP BY par un + ... Et là miracle ! ça marche niquel.
SELECT idSender as expediteur, idReceiver as destinataire, COUNT(messagerie.id)
FROM message
WHERE idReceiver = 188 OR idSender = 188
GROUP BY expediteur + destinataire
Je reçois bien uniquement une ligne par conversation avec le nombre de messages associés.
Donc voilà ça marche niquel par contre j'arrive à trouver aucune info sur le net concernant l'utilisation d'un + sur un GROUPBY. Quelqu'un peut m'en dire plus ?
PS : Au final pour ma messagerie je vais passer par une table conversation pour rester ouvert aux évolutions (conversations à plusieurs). A moins que vous connaissiez une meilleure méthode ?
A bientôt !