Wordpress自定义SQL查询

时间:2017-11-08 20:56:22

标签: php sql wordpress

我希望按照他们最近发布的发布日期显示所有作者。 通过下面的代码,我可以轻松列出作者。但我想一次展示每位作者。 我做了一个研究,发现了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;
}

1 个答案:

答案 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

这应该可以提供所需的输出。

现在解释一下:

  1. 选择,然后仅列出您真正需要的字段,因为这可以使查询更快。
  2. 只使用一个,然后加入另一个表。在这种情况下,这只是首选语法和清晰度的问题
  3. where子句减少了两个表匹配的那个
  4. 使用GROUP BY,您可以选择要从您想要的唯一列中显示的不同列
  5. ORDER BY和LIMIT保持原样
  6. 缺点:在订购之前完成分组。因此,您可以按主键发生的顺序获得结果,按时间排序仅适用于显示结果的顺序,而不是每个用户显示的次数。