TheRec
mercredi 14 février 2007 à 11:02
Bonjour,
Je pense avoir compris ce qu'il veut, pour résumer, il veut les x derniers enregistrements (en fonction de date_envoi) et qu'il n'y ait qu'un seul enregistrement par membre.
Premier point, qui a été évoqué précédemment, lorsqu'une clause
GROUP BY est utilisée la requête ne renvoie des valeurs significatives uniquement pour les champs sur lesquels on applique une fonction d'agrégation. Pour les champs auxquels on n'applique pas de fonction d'agrégation, ils n'auront une valeur significative que si ils sont uniques DANS le groupe.
CITATION
MySQL a étendu l'utilisation de la clause GROUP BY. Vous pouvez utiliser des colonnes ou des calculs de l'expression SELECT qui n'apparaissent pas dans la clause GROUP BY. Cela se dit n'import quelle valeur pour ce groupe. Vous pouvez utiliser cela pour améliorer les performances en évitant les tris ou les regroupements inutiles de valeurs.
Source:
Manuel MySQL - GROUP BY avec les champs cachésCela implique que la clause ORDER BY ne peut pas se baser sur ces champs cachés efficacement, vu que leur valeur n'est présente qu'une fois le groupement effectué.
Concernant DISTINCT (proposé par Portekoi), le problème est fondamentalement le même, les champs sont "filtrés" avant d'être "ordonnés" et donc tu n'obtiendra pas le résultat souhaité (dans le cas de sa requête tu obtiendra même tous les enregistrements de ta table à moins qu'il y ait un couple "membre/titre" qui se répète... la clause DISTINC ne se fait pas sur un champs, mais sur tous).
Tout cela pour te dire que ce que tu souhaites faire ne peut pas se réaliser en une seule requête à ma connaissance. Apparemment, vu ton premier message, tu sais comment le faire autrement donc je ne vais pas t'expliquer quelles sont les autres solutions