在wordpress数据库中,我想从已撰写至少五篇文章的作者中选择所有已发表的文章,并用他们的登录名替换作者的ID。我通过选择所有已发布的帖子完成了这一点,使用JOIN
语句对其进行了两次过滤,其中一个加入了子查询的结果集,以便为那些作者提供超过五篇文章。
我们在这里使用代码:
SELECT posts.post_author, users.user_login, posts.post_content, posts.post_date
FROM zwzt_wp.zwzt_wp_posts AS posts
INNER JOIN zwzt_wp.zwzt_wp_users AS users
ON posts.post_author=users.id
INNER JOIN (
SELECT posts1.post_author, COUNT(*) AS count
FROM zwzt_wp.zwzt_wp_posts AS posts1
WHERE posts1.post_type='post' AND posts1.post_status='publish'
GROUP BY posts1.post_author
HAVING count > 5
ORDER BY posts1.post_author
) as regular_users
ON posts.post_author=regular_users.post_author
WHERE posts.post_type='post' AND posts.post_status='publish'
ORDER BY posts.post_author, posts.post_date DESC;
对我而言,这看起来有点臃肿且耗费时间,特别是因为我在posts
上运行了两个选择查询。有没有办法以更有效的方式实现这一目标?
答案 0 :(得分:2)
我不认为您可以做很多事情来简化查询。但是,你可以做一些事情:
ORDER BY
。zwzt_wp_posts(post_type, post_status, post_author)
上创建索引。users(id)
上的索引。zwzt_wp_posts(post_author)
上也有索引。如果在查询中经常使用此类信息,您可能需要设置触发器以维持用户级别的计数。