Consulta SQL para seleccionar usuarios por metadatos
Hola, estoy intentando seleccionar usuarios con un rol específico solamente, usando la siguiente sentencia SQL...
SELECT DISTINCT ID, u.user_login, u.user_nicename, u.user_email
FROM wp_users u, wp_usermeta m
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%supplier%'
ORDER BY u.user_registered
Sin embargo, devuelve toda la tabla. ¿Qué estoy haciendo mal?
PD: Esto necesita ser un SELECT SQL ya que lo estoy haciendo en phpMyAdmin para exportar los datos a CSV.
¡Gracias de antemano!

Verifica nuevamente tu sintaxis SQL. Parece que deseas hacer un JOIN
... pero no estás construyendo la consulta correctamente.
Debería ser algo más como:
SELECT u.ID, u.user_login, u.user_nicename, u.user_email
FROM $wpdb->users u
INNER JOIN $wpdb->usermeta m ON m.user_id = u.ID
WHERE m.meta_key = 'wp_capabilities'
AND m.meta_value LIKE '%supplier%'
ORDER BY u.user_registered
Debes indicar en la consulta cómo relacionas los metadatos del usuario con el usuario.
También ten en cuenta que estoy usando $wpdb->
en lugar de wp_
. Esto es importante si alguna vez planeas usar esta consulta en un plugin en un sitio con un prefijo de base de datos diferente a "wp". Sin embargo, si estás ejecutando directamente en SQL, deberías volver a cambiarlo.

Cuando cambié el == por = y corregí la ortografía de 'capabilities' esto funcionó perfectamente. ¡Gracias EAMann! Como estoy usando esto en phpmyadmin no necesito el $wpdb-> para especificar el prefijo de la tabla. Pero para cualquiera que esté codificando esto en php definitivamente es el camino a seguir.

Lo siento, escribí esto rápidamente mientras depuraba un montón de operaciones de igualdad en .Net ... ==
funciona mejor en ese mundo, así que lo puse por error. Todo está corregido arriba.

Existe una clase integrada en el núcleo para consultas:
// Ejemplo
$all_subscribers = new WP_User_Query( array( 'role' => 'subscriber' ) );
Esto permite iterar a través de los objetos de usuario:
// Ejemplo
foreach ( $all_subscribers as $subscriber )
{
echo $subscriber->display_name;
// Inspeccionar el objeto:
var_dump( $subscriber );
}
Para más ejemplos o consultar usuarios por otros campos, por favor consulta el codex.
