MySQL按组前排序

MySQL按组前排序

这里有很多类似的问题,但我认为没有人能充分回答这个问题。

我将继续从当前最受欢迎的问题如果可以的话,就用他们的例子。

此实例中的任务是获取数据库中每个作者的最新帖子。

示例查询产生不可用的结果,因为它并不总是返回的最新帖子。

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

目前公认的答案是

SELECT
    wp_posts.*FROM wp_postsWHERE
    wp_posts.post_status='publish'
    AND wp_posts.post_type='post'GROUP BY wp_posts.post_authorHAVING wp_posts.post_date = MAX(wp_posts.post_date) <- ONLY THE LAST POST FOR EACH AUTHORORDER BY wp_posts.post_date DESC

不幸的是,这个答案显然是错误的,而且在许多情况下产生的结果不如原始查询那么稳定。

我最好的解决方案是使用表单的子查询

SELECT wp_posts.* FROM (
    SELECT * 
    FROM wp_posts    ORDER BY wp_posts.post_date DESC) AS wp_postsWHERE wp_posts.post_status='publish'AND wp_posts.post_type='post'GROUP BY wp_posts.post_author

我的问题很简单:在不诉诸子查询的情况下,在分组之前是否需要对行进行排序?

编辑:这个问题是对另一个问题的延续,我的具体情况略有不同。您可以(而且应该)假设还存在一个wp_posts.id,它是该特定帖子的唯一标识符。


沧海一幻觉
浏览 487回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL