Consulta SQL para seleccionar usuarios por metadatos

11 oct 2011, 17:02:24
Vistas: 15.7K
Votos: 5

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!

sql
2
Comentarios

Podrías tener más suerte en el sitio de Administradores de Bases de Datos de Stack Exchange.

Chris_O Chris_O
11 oct 2011 18:41:33

@Chris_O No estoy de acuerdo. Si bien esto es relevante para operaciones genéricas de bases de datos, también cubre partes de la API de WordPress como muestra la respuesta de kaiser más abajo. Creo que debería quedarse.

EAMann EAMann
12 oct 2011 01:05:35
Todas las respuestas a la pregunta 2
3

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.

11 oct 2011 18:43:24
Comentarios

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.

Gyro Gyro
11 oct 2011 23:52:58

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.

EAMann EAMann
12 oct 2011 01:04:23

Esto fue muy útil para mí para encontrar usuarios que son clientes de woocommerce ya que esa información está establecida en el campo wp_capabilities. ¡Gracias!

Denoteone Denoteone
19 ago 2014 10:37:25
0
-1

Existe una clase integrada en el núcleo para consultas:

new WP_User_Query;

// 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.

11 oct 2011 19:22:29