我需要找到每个作者的最新帖子,然后对结果进行分组,所以我只为每个作者撰写一个最新帖子。
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 这样可以正确地对输出进行分组,因此每个作者只能得到一篇帖子,但是在对结果进行分组之后而不是在选择之前对结果进行排序。
经过一番评论后,我决定添加一些其他信息。
我工作的公司也使用Postgres,尤其是SQL Server。该数据库不允许此类查询。因此,我知道还有另一种方法(我在下面写了一个解决方案)。如果您不按投影中处理的所有列分组或使用汇总函数,则还应该知道该怎么做。否则就这样吧!
我选择了上面的解决方案,因为这是一个特定的问题。汤姆希望在wordpress网站上获得每位作者的最新帖子。在我看来,如果作者每秒发表一个以上的帖子,则可以忽略不计。WordPress甚至应该通过垃圾邮件双重检测来禁止它。我从个人经验中知道,使用MySQL做这样一个肮脏的小组,对性能有很大的好处。但是,如果您知道自己的工作,那么就可以做到!我在专业负责的应用程序中有如此肮脏的小组。在这里,我的表有一些mio行,需要5到15秒而不是100 ++秒。
可能对某些利弊有用:http : //ftp.nchu.edu.tw/MySQL/tech-resources/articles/debunking-group-by-myths.html
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 但是如果一个作者每秒多发一篇帖子,那么您将得到的一行多一行,而不是最后一行。
现在,您可以再次旋转轮子,并获得最高职位Id。即使在这里,也至少不能保证您真的得到了最后一个。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。