我希望按照他们最近发布的发布日期显示所有作者。 通过下面的代码,我可以轻松列出作者。但我想一次展示每位作者。 我做了一个研究,发现了DISTINCT声明,但无法做到。你能帮帮我吗?
谢谢
global $wpdb;
$querystr = "SELECT * from wp_users, wp_posts WHERE wp_users.ID = wp_posts.post_author AND wp_posts.post_type = 'post' AND wp_posts.post_status = 'publish' ORDER BY wp_posts.post_date DESC LIMIT 5";
$news=$wpdb->get_results($querystr, OBJECT);
foreach($news as $np)
{
$author_displayName = $np->display_name;
$post_date= $np->post_date;
}
答案 0 :(得分:1)
编辑工作解决方案,原创于行下方 刚刚在SO上找到了这个旧解决方案:MySQL order by before group by
他们想要提取完整的帖子表,但显然您只对用户名和上次发布日期感兴趣,所以这应该是一个更好的解决方案,而不需要嵌套两个查询:
SELECT max(wp_posts.post_date) MaxPostDate, wp_users.display_name
FROM wp_posts
JOIN wp_users ON (wp_posts.post_author = wp_users.id)
WHERE wp_posts.post_status='publish' AND wp_posts.post_type='post'
GROUP BY post_author
ATTN:在MySQL> = 5.7.5中,当启用ONLY_FULL_GROUP_BY SQL模式时,您必须使用ANY_VALUE()函数包围GROUP BY语句中未提及的所有列。 即:
SELECT max(wp_posts.post_date) MaxPostDate, ANY_VALUE(wp_users.display_name)
SELECT wp_users.display_name, wp_posts.post_date
FROM wp_users
LEFT JOIN wp_posts ON (wp_users.ID = wp_posts.post_author)
WHERE wp_posts.post_type = 'post' AND wp_posts.post_status = 'publish'
GROUP BY wp_users.display_name
ORDER BY wp_posts.post_date DESC
LIMIT 5
这应该可以提供所需的输出。
现在解释一下:
缺点:在订购之前完成分组。因此,您可以按主键发生的顺序获得结果,按时间排序仅适用于显示结果的顺序,而不是每个用户显示的次数。