wordpress 获取具有角色订阅服务器的用户的SQL查询

u0njafvf  于 2023-10-17  发布在  WordPress
关注(0)|答案(8)|浏览(154)

我的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

有人能帮我吗?

e4eetjau

e4eetjau1#

我已经得到了我的问题的答案:

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查询。

zbwhf8kr

zbwhf8kr2#

下面是@qqruza的答案的一个小变体,它包括用户的电子邮件和角色,并返回所有角色的用户。

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

如果你有一个WordPress多站点安装,要获取所有子站点的角色,用途:

SELECT wp_users.ID, wp_users.user_nicename, wp_users.user_email, wp_usermeta.meta_key, wp_usermeta.meta_value 
     FROM wp_users 
     JOIN wp_usermeta ON wp_users.ID = wp_usermeta.user_id 
     WHERE wp_usermeta.meta_key LIKE 'wp_%capabilities'
     ORDER BY wp_users.user_nicename

当然,您需要查看wp_usermeta.meta_key值来确定记录适用于哪个子站点(博客)。

ev7lccsx

ev7lccsx3#

这对我很有效:

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
3duebb1j

3duebb1j4#

我不熟悉WordPress的内部结构,但我可以告诉你,你的LIKE声明可能是错误的。在LIKE参数中没有隐式/自动通配符,因此您所拥有的(没有通配符)基本上与使用=相同。你可能想要:

'wp_usermeta'.meta_value LIKE '%subscriber%'
pod7payv

pod7payv5#

您可以用途:

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

vx6bjr1n6#

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

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%';
vvppvyoh

vvppvyoh7#

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%'
s4chpxco

s4chpxco8#

公认的解决方案假设表前缀是“wp_”,这很好,但由于安全性,这种情况很少出现。但是,有些用户可能会发现,由于对表列名的详细调用,以及需要更改Meta_key过滤器以包含表前缀,因此难以适应已接受的解决方案。
下面的SQL为那些发现SQL难以适应自己的示例的用户简化了这一点,并使Meta_key过滤器独立于表前缀。

SELECT ID, user_nicename, meta_value 
FROM wp_users U JOIN wp_usermeta M ON U.ID = M.user_id 
WHERE meta_key LIKE '%capabilities' AND meta_value LIKE '%subscriber%' 
ORDER BY user_nicename;

只需要为FROM语句中的users和usermeta更改表前缀。
所有的荣誉,以接受的解决方案,我只希望这个解决方案简化了SQL代码一点。

相关问题