8791 sujets

Développement web côté serveur, CMS

Bonjour et bonne année tout le monde,

j'ai un petit soucis avec un script de messagerie, pour regrouper les messages par expediteur (comme les messages privés sur le nouveau twitter) je fais une requette group by :

SELECT * FROM messages WHERE destinataire = '1' GROUP BY expediteur ORDER BY date DESC LIMIT 0,10

Les messages sont bien regroupés par expediteur et triés par date d'envoi, seulement dans ma boucle lorsque je veux récupérer la date du dernier message pour chaque group / discussion, je me retrouve avec la date du premier messages envoyé au d'avoir le dernier.

exemple:

$requette = mysql_query("SELECT * FROM messages WHERE destinataire = '$id_membre' GROUP BY expediteur ORDER BY date DESC LIMIT 0,10");
while($data = mysql_fetch_array($requette)) 
	{
        echo $data[date]; // <-- et là je me retrouve avec la date du premier ID au lieu d'avoir celle du plus récent
        }


En espérant avoir été assez clair ... Smiley rolleyes Merci d'avance pour votre aide Smiley smile
Ouais la voila:

CREATE TABLE `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`expediteur` int(11) NOT NULL,
`destinataire` int(11) NOT NULL,
`texte` text NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) 
Alors d'après ta table et ce que j'ai compris que tu voulais, cette requête devrais faire l'affaire


SELECT `Message`.*
FROM `messages` AS `Message`
LEFT JOIN `messages` AS `Message_` ON (
    `Message_`.`expediteur` = `Message`.`expediteur`
    AND `Message_`.`date` > `Message`.`date`
)
WHERE `Message`.`destinataire` = '. $id_membre .'
AND `Message_`.`id` IS NULL
ORDER BY `Message`.`date` DESC
LIMIT 0,10;


Chaque ligne correspondant au dernier message d'un expéditeur pour le destinataire $id_membre avec un max de 10 expéditeurs.

[EDIT] Oups petite erreur dans la requête
Modifié par bilhackmac (05 Jan 2011 - 14:50)