MySQL : trier les résultats avant de les regrouper par
Lors du regroupement des résultats dans MySQL, il est important de comprendre l'ordre des opérations. Par défaut, MySQL classera les résultats une fois qu'ils ont été regroupés, ce qui peut ne pas être le comportement souhaité dans certains cas.
Requête originale et limitation
Considérez ce qui suit requête :
SELECT wp_posts.* FROM wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' GROUP BY wp_posts.post_author ORDER BY wp_posts.post_date DESC
Cette requête regroupe correctement les résultats pour afficher uniquement le dernier message de chaque auteur. Cependant, les résultats sont classés après le regroupement, donc le dernier message ne se trouve pas nécessairement au début de la liste.
Solution utilisant HAVING
Pour commander les résultats avant le regroupement, nous pouvons utiliser la clause HAVING :
SELECT wp_posts.* FROM wp_posts WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post' GROUP BY wp_posts.post_author HAVING wp_posts.post_date = MAX(wp_posts.post_date) ORDER BY wp_posts.post_date DESC
La clause HAVING filtre les résultats après le regroupement, garantissant que seules les lignes avec la post_date maximale pour chaque auteur sont renvoyés. Cela garantit que le dernier message est affiché au début de la liste.
Solution alternative pour d'autres bases de données
Si vous utilisez une base de données qui ne prend pas en charge la clause HAVING ( comme Postgres ou SQL Server), une solution alternative consiste à joindre la table d'origine avec une sous-requête qui calcule la post_date maximale pour chaque auteur :
SELECT wp_posts.* FROM wp_posts JOIN ( SELECT g.post_author MAX(g.post_date) AS post_date FROM wp_posts as g WHERE g.post_status='publish' AND g.post_type='post' GROUP BY g.post_author ) as t ON wp_posts.post_author = t.post_author AND wp_posts.post_date = t.post_date ORDER BY wp_posts.post_date
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!