首页 >数据库 >mysql教程 >如何在不使用子查询的情况下高效获取MySQL中每个作者的最新帖子?

如何在不使用子查询的情况下高效获取MySQL中每个作者的最新帖子?

DDD
DDD原创
2024-12-29 02:22:10373浏览

How to Efficiently Get the Latest Post for Each Author in MySQL Without Subqueries?

MySQL Order By Before Group By:另一种方法

在 MySQL 中,在分组之前对行进行排序可能具有挑战性,特别是当所需的顺序为不由后续的 group by 保证。虽然使用子查询是一种常见的解决方案,但它可能并不总是最佳方法。

在所呈现的场景中,目标是从 wp_posts 表中检索每个作者的最新帖子。提供的查询(包括被描述为“当前接受的答案”的查询)无法始终如一地提供预期结果。

解决此问题而不诉诸子查询的另一种解决方案是利用窗口函数的组合和自连接:

WITH LatestPostsPerAuthor AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY post_author ORDER BY post_date DESC) AS rn
    FROM wp_posts
    WHERE post_status='publish'
    AND post_type='post'
)
SELECT a.*
FROM LatestPostsPerAuthor a
JOIN LatestPostsPerAuthor b ON a.rn = b.rn AND a.post_author = b.post_author
GROUP BY a.post_author
ORDER BY a.post_date DESC;

此查询使用 ROW_NUMBER() 窗口函数根据每个作者组中的 post_date 为帖子分配排名。然后,自连接可确保仅保留排名最高的行(即最新的帖子)进行分组和排序。

通过使用这种方法,可以实现所需的结果,而无需额外的开销子查询,为给定场景提供准确且一致的结果。

以上是如何在不使用子查询的情况下高效获取MySQL中每个作者的最新帖子?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn