Php wordpress查询数据库用于一次查询中的每用户帖子计数

Php wordpress查询数据库用于一次查询中的每用户帖子计数,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我有一个自定义的用户角色,我们称之为“用户角色”,它只能创建一个自定义的帖子类型,在许多类别下称之为cpt 我试图得到的是一个每页显示20个用户(将有分页)的页面,其中包含休闲信息(应该只显示发布了2篇以上帖子的用户): 1) 此用户发布的cpt帖子总数 2) 此用户发布的类别1和类别2下的帖子总数 我尝试使用WordPress get_users函数为所有角色为“user role”的作者获取信息,然后使用count_many_users_posts()循环抛出找到的用户获取每个用户的帖子总数

我有一个自定义的用户角色,我们称之为“用户角色”,它只能创建一个自定义的帖子类型,在许多类别下称之为cpt

我试图得到的是一个每页显示20个用户(将有分页)的页面,其中包含休闲信息(应该只显示发布了2篇以上帖子的用户):
1) 此用户发布的cpt帖子总数
2) 此用户发布的类别1和类别2下的帖子总数

我尝试使用WordPress get_users函数为所有角色为“user role”的作者获取信息,然后使用count_many_users_posts()循环抛出找到的用户获取每个用户的帖子总数,然后使用新的WP_查询获取具有初始作者id且在指定类别中的所有帖子。有了一个新的foreach throw this lasts posts,我正在计算每个用户找到的帖子数量

将解决方案限制为2个用户逻辑似乎可行

问题是:脚本运行太慢,用户数量非常大(约3k),因此在另一个循环中运行两个循环太慢,无法正常工作

我的想法是使用一个自定义查询,其中我应该为指定的用户角色组合一个select THES users表inner JOIN和usermeta表,以仅获取所需角色的用户ID,并且所有此查询再次与posts表inner JOIN,从中仅获取post_type=cpt的发布帖子,并计算返回的行数

如果可能的话,上面的查询将根据term_relationships表再次过滤结果,以仅统计类别为1,2的帖子(这应返回到帖子总数)

我尝试过但没有成功(我没有得到任何结果,但我真的认为我没有正确使用联接和where子句)是:


这就是我想到的,有没有一个标准的解决方案?或者Wordpress数据库和Wordpress函数在这一点上没有涵盖如此大的数据集吗?

您可以尝试在下面查询自定义帖子类型中用户级别为10的每个作者的帖子数量

SELECT COUNT(u.`ID`) AS post_count,p.`ID`,u.`user_nicename`   FROM
`wp_posts` p 
LEFT JOIN  `wp_users` u ON( p.`post_author`=u.`ID`) 
INNER JOIN `wp_usermeta`  um ON (u.`ID` = um.`user_id` AND um.`meta_key`='wp_user_level')    
WHERE p.`post_type`='cpt' AND p.`post_status`='publish' AND um.`meta_value`='10'
GROUP BY u.`ID`
HAVING post_count>2
此查询用于统计特定类别中作者的帖子数量

SELECT COUNT(CASE WHEN wtt.`term_id`='3' THEN u.`ID` END) AS cat1_count,
COUNT(CASE WHEN wtt.`term_id`='4' THEN u.`ID` END) AS cat2_count,
p.`ID`,u.`user_nicename`   FROM
 `wp_users` u 
INNER JOIN `wp_usermeta`  um ON (u.`ID` = um.`user_id` AND um.`meta_key`='wp_user_level')
LEFT JOIN `wp_posts` p ON(u.`ID`= p.`post_author`)
LEFT JOIN `wp_term_relationships` wtr ON (p.`ID` = wtr.`object_id`) 
LEFT JOIN `wp_term_taxonomy` wtt ON (wtr.`term_taxonomy_id`=wtt.`term_taxonomy_id`)
WHERE p.`post_type`='cpt' AND p.`post_status`='publish' AND um.`meta_value`='10'
GROUP BY u.`ID`
对于虚拟类别no.s,我使用termid 3和4进行计数。您需要添加适当的termid,以便对指定类别中的作者的帖子进行计数

SELECT COUNT(u.`ID`) AS post_count,p.`ID`,u.`user_nicename`   FROM
`wp_posts` p 
LEFT JOIN  `wp_users` u ON( p.`post_author`=u.`ID`) 
INNER JOIN `wp_usermeta`  um ON (u.`ID` = um.`user_id` AND um.`meta_key`='wp_user_level')    
WHERE p.`post_type`='cpt' AND p.`post_status`='publish' AND um.`meta_value`='10'
GROUP BY u.`ID`
HAVING post_count>2
SELECT COUNT(CASE WHEN wtt.`term_id`='3' THEN u.`ID` END) AS cat1_count,
COUNT(CASE WHEN wtt.`term_id`='4' THEN u.`ID` END) AS cat2_count,
p.`ID`,u.`user_nicename`   FROM
 `wp_users` u 
INNER JOIN `wp_usermeta`  um ON (u.`ID` = um.`user_id` AND um.`meta_key`='wp_user_level')
LEFT JOIN `wp_posts` p ON(u.`ID`= p.`post_author`)
LEFT JOIN `wp_term_relationships` wtr ON (p.`ID` = wtr.`object_id`) 
LEFT JOIN `wp_term_taxonomy` wtt ON (wtr.`term_taxonomy_id`=wtt.`term_taxonomy_id`)
WHERE p.`post_type`='cpt' AND p.`post_status`='publish' AND um.`meta_value`='10'
GROUP BY u.`ID`