SQL 查询以获取具有订阅者角色的用户

SQL Query to Get Users With Role Subscriber

我的 SQL 查询没有任何运气来获取具有订阅者角色的用户:

SELECT 
      ID, 
      display_name 
FROM 'wp_users' 
INNER JOIN 'wp_usermeta' ON 'wp_users'.ID = 'wp_usermeta'.user_id 
WHERE 'wp_usermeta'.meta_key = 'wp_capabilities' 
AND ('wp_usermeta'.meta_value LIKE 'subscriber') ORDER BY display_name

任何人都可以帮助我吗?

我不熟悉 WordPress 的内部结构,但我可以告诉你,你的 LIKE 说法可能是错误的。 LIKE 参数中没有 implicit/automatic 通配符,因此您所拥有的(没有通配符)与使用 = 基本相同。 IE。你可能想要:

'wp_usermeta'.meta_value LIKE '%subscriber%'

我得到了问题的答案:

SELECT wp_users.ID, wp_users.user_nicename 
FROM wp_users INNER JOIN wp_usermeta 
ON wp_users.ID = wp_usermeta.user_id 
WHERE wp_usermeta.meta_key = 'wp_capabilities' 
AND wp_usermeta.meta_value LIKE '%subscriber%' 
ORDER BY wp_users.user_nicename

如果有人遇到同样的问题,请使用我上面的 SQL 查询。

您可以使用:

$user_query = new WP_User_Query( array( 'role' => 'Subscriber' ) );

@qqruza 的回答略有不同,其中包括用户的电子邮件和角色以及所有角色的 returns 用户。

 SELECT wp_users.ID, wp_users.user_nicename, wp_users.user_email, wp_usermeta.meta_value 
 FROM wp_users 
 JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id 
 WHERE wp_usermeta.meta_key = 'wp_capabilities'
 ORDER BY wp_users.user_nicename

这对我有用:

     SELECT a.ID, a.user_login  
     FROM wp_users a
     JOIN wp_usermeta b ON a.ID = b.user_id 
     WHERE b.meta_key = 'wp_capabilities' and b.meta_value like '%contributor%'
     ORDER BY a.user_nicename

如果你想获取其他元信息,你可以使用子查询,记住子查询越多,整体查询速度就越慢。

SELECT 
    ID, 
    user_email,
    (SELECT `meta_value` FROM wp_usermeta WHERE wp_usermeta.user_id=wp_users.ID AND `wp_usermeta`.`meta_key` = 'first_name') as first_name,
    (SELECT `meta_value` FROM wp_usermeta WHERE wp_usermeta.user_id=wp_users.ID AND `wp_usermeta`.`meta_key` = 'last_name') as last_name,
    user_registered
FROM wp_users
JOIN wp_usermeta ON wp_usermeta.user_id = wp_users.ID
WHERE `meta_value` LIKE '%subscriber%';
SELECT id,
       user_email,
       (SELECT meta_value
        FROM   wp_usermeta
        WHERE  wp_usermeta.user_id = wp_users.id
               AND wp_usermeta.meta_key = 'first_name') AS first_name,
       (SELECT meta_value
        FROM   wp_usermeta
        WHERE  wp_usermeta.user_id = wp_users.id
               AND wp_usermeta.meta_key = 'last_name')  AS last_name,
       user_registered
FROM   wp_users
       JOIN wp_usermeta
         ON wp_usermeta.user_id = wp_users.id
WHERE meta_value  LIKE '%subscriber%'