I can successfully get all my WordPress users using the following code:
global $wpdb;
$sql="SELECT * FROM " . $wpdb->users;
$users = $wpdb->get_results( $sql, 'ARRAY_A' );
However, I need to filter the users with multiple roles (only get “role1” and “role2”). I have tried various methods including the following which does not work:
global $wpdb;
$sql="
SELECT ID, display_name FROM wp_users
INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )
INNER JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id )
WHERE 1=1
AND (
(
(
( mt1.meta_key = "wp_capabilities' AND mt1.meta_value LIKE '%role1%' )
)
AND
(
(
( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%role2%' )
)
)
)
)
ORDER BY user_login ASC
';
$users = $wpdb->get_results( $sql, 'ARRAY_A' );