Ordre MySQL avant regroupement par
Lors de la récupération de données d'une base de données à l'aide de MySQL, il est souvent souhaitable de trier les résultats dans un ordre spécifique . Cependant, lorsque vous utilisez la clause GROUP BY pour regrouper des données, les résultats sont généralement classés après avoir été regroupés, ce qui peut ne pas produire le résultat souhaité.
Dans l'exemple fourni, la requête vise à récupérer le dernier message. pour chaque auteur et regroupez les résultats, mais la clause GROUP BY entraîne le classement des publications après le regroupement, ce qui donne des résultats incorrects.
Pour résoudre ce problème, une approche alternative consiste à utiliser une sous-requête pour déterminer la dernière publication date pour chaque auteur avant d’effectuer l’opération de groupe. Ceci peut être réalisé en utilisant la requête modifiée suivante :
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 DESC;
Cette requête utilise d'abord une sous-requête pour calculer la dernière date de publication de chaque auteur et la stocke dans une table temporaire t. Il rejoint ensuite wp_posts avec t pour sélectionner les lignes qui correspondent aux dernières dates de publication et regroupe les résultats par auteur. Enfin, les résultats sont classés par ordre décroissant par date de publication pour obtenir les dernières publications de chaque auteur.
En utilisant cette approche, vous pouvez vous assurer que les publications sont classées avant d'être regroupées, fournissant ainsi les résultats souhaités. sans compromettre l'intégrité de l'opération de regroupement.
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!