Ordre MySQL avant groupe par
Le problème :
Pour trouver le dernier message pour chaque auteur et regrouper les résultats, nous devons trier les articles par date avant d'appliquer le groupe par opération. Cependant, la requête donnée classe les résultats après le regroupement, ce qui peut conduire à des résultats incorrects.
La solution :
Pour résoudre ce problème, nous pouvons utiliser le HAVING clause au lieu de ORDER BY dans l’opération group by. La clause HAVING nous permet d'appliquer des conditions aux données agrégées et d'exclure les groupes qui ne remplissent pas la condition.
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;
En plaçant la condition dans la clause HAVING, nous nous assurons que les résultats sont filtrés avant le groupe par opération est appliqué. Cela garantit que chaque auteur n'a que son dernier article inclus dans les résultats.
Considérations supplémentaires :
Cette méthode de tri avant regroupement est spécifique à MySQL et peut ne pas fonctionner dans d'autres bases de données telles que Postgres ou SQL Server. Pour ces bases de données, des approches alternatives, telles que l'utilisation d'une sous-requête ou la jointure avec une table de valeurs maximales, peuvent être nécessaires.
Cependant, il est important de noter que l'utilisation de GROUP BY avec un tri peut être efficace pour les grands ensembles de données dans MySQL, surtout si les données ne sont pas réparties uniformément entre les groupes. Par conséquent, il est recommandé d'utiliser cette méthode le cas échéant pour optimiser les performances.
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!