Bonjour à tous, et merci d'avance de vous attarder sur mon problème.
Je veux essayer d'être le plus précis possible.
Je boss actuellement sur un site qui doit disposer d'une boite de réception de messages privés.
Les messages doivent être organisés sous forme de "conversations" , c'est à dire par "Sujet", un peu comme on peut trouver sur Outlook.com.
Concernant ma base de donnée, et notamment une table bien spécifique nommée wp_pm (table wordpress), voici sa structure :
id / subject / content / sender / recipient / date / deleted / unread
id= correspond à l'ID unique du message (auto incrémenté)
subject = le sujet du message
content = le contenu du message
sender = l'id de l'expéditeur du message
recipient = l'id du destinataire du message
date = date d'envoie du message
deleted = si le message a été mis dans la corbeille (1 ou 0)
unread = si le message a été lu (1 ou 0)
Ca c'est pour la base.
Pour mon affichage, je souhaite que les messages soient regroupés par "SUJET" afin d'éviter que trop de messages ne soient affichés dans la boite de réception si les échanges entre les deux utilisateurs sont longs.
Voici de ou je suis parti (en sachant que je récupère également le nom d'utilisateur dans une autre table wp_users :
Voici un exemple de données (fictifs) trier par une requête simple :
$id_user correspond juste à l'ID de l'utilisateur qui consulte sa boite de reception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT u.user_login, m.id, m.subject,m.content, m.sender ,m.recipient, m.date, m.unread, m.deleted FROM wp_pm m LEFT JOIN wp_users u ON m.sender=u.id WHERE recipient='$id_user' AND deleted='0' ORDER BY m.date ASC
1 / Sujet1 / Mon contenu / 1 / 2 / 01/01/2013 / 0 / 0
2/ Sujet1 /Mon contenu / 1/ 2 / 02/01/2013 / 0 / 0
3/ Sujet1 /Mon contenu / 1 / 2 / 03/01/2013 / 0 / 0
4/ Sujet1 /Mon contenu / 1 / 2 / 04/01/2013 / 0 / 0
5/ Sujet2 /Mon contenu / 1 / 2 / 05/01/2013 / 0 / 0
je vous ai mis des couleurs juste pour que vous différencier bien les deux "conversations". Donc en gros là je trie tous les messages par date. Rien de plus simple.
Maintenant je veux éviter que "tous" les messages soient affichés, et les regrouper par "sujet" et d'afficher juste le dernier message en date pour une conversation. Pour les regrouper j'utilise donc un Group By subject :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT u.user_login, m.id, m.subject,m.content, m.sender ,m.recipient, m.date, m.unread, m.deleted FROM wp_pm m LEFT JOIN wp_users u ON m.sender=u.id WHERE recipient='$id_user' AND deleted='0' GROUP BY subject ORDER BY m.date ASC
Il me regroupe bien mes messages par sujets mais je voudrais qu'il affiche pour chaque "groupe" le DERNIER message écrit, hors il m'affiche le PREMIER ce qui donne :
1 / Sujet1 / Mon contenu / 1 / 2 / 01/01/2013 / 0 / 0
5/ Sujet2 /Mon contenu / 1 / 2 / 05/01/2013 / 0 / 0
Je voudrais donc que le résultat soit plutot :
1 / Sujet1 / Mon contenu / 1 / 2 / 04/01/2013 / 0 / 0 (dernier "Sujet1")
5/ Sujet2 /Mon contenu / 1 / 2 / 05/01/2013 / 0 / 0
Et c'est ici que je bloque, je ne vois pas comment forcer ma requete à afficher le dernier message de chaque "groupe", au lieu du premier.
Le probleme étant qu'il "groupe" les messages avant d'avoir "trié par date" , donc je ne sais pas trop comment faire :/
Encore merci pour votre aide !
Partager