MySQL consulta dos tablas de bases de datos, usuarios y usermeta y ordenar por valor de meta intscal

wordpress.stackexchange https://wordpress.stackexchange.com/questions/11403

Pregunta

Estoy tratando de obtener una variedad de usuarios del sitio ordenados por un meta valor personalizado (un int).

Puedo consultar a los usuarios bien y hacer que vuelvan a usar en un foreach. Actualmente tengo los resultados de la consulta que regresan ya ordenados por display_name desde la tabla de usuarios. Quiero que ordene por el valor personalizado de USERMeta.

¿Alguna idea sobre cómo modificar esta consulta para hacer esto?

function get_all_top_members() {
    global $wpdb;
   $gather_users = "SELECT * FROM ".$wpdb->prefix."users ORDER BY display_name ASC";
$all_users = $wpdb->get_results($gather_users);
return $all_users;
}
¿Fue útil?

Solución

No obtendrás un tipo adecuado en el meta_value columna porque los valores almacenados allí no se tratan como valores enteros, pero puede usar un método similar a cómo se hizo de WordPress cuando estábamos usando meta_value_num hacer clasificación, lo que básicamente implicó agregar un número al frente de los datos.

function get_users_ordered_by_meta( $key = '', $d = 'ASC' ) {
    global $wpdb;
    $d = ( strtoupper( $d ) == 'DESC' ) ? 'DESC' : 'ASC';
    if( '' == $key )
        return;
    $r = $wpdb->get_results( $wpdb->prepare( "
        SELECT u.ID, u.display_name, u.user_nicename, um.meta_value 
        FROM {$wpdb->usermeta} um, {$wpdb->users} u
        WHERE um.user_id = u.ID
        AND um.meta_key = %s
        ORDER by (0 + um.meta_value) $d
    ", $key ) );
    return $r;
}

Esto le da un tipo adecuado en la columna Meta Valor.

Supuse que puede que le guste una función para que pueda llamarlo donde sea que lo necesite, simplemente pase la meta clave que tiene configurado para los usuarios y, opcionalmente, cambie el orden de clasificación.

$yourvar = get_users_ordered_by_meta('your-key');

Orden descendiente.

$yourvar = get_users_ordered_by_meta('your-key', 'desc');

Recibirá una variedad de objetos devueltos como antes, por lo que asumirá que sabe cómo recurrir a esos datos y apropiarse de la pantalla, etc. (si no, publique un comentario).

Otros consejos

probar :

global $wpdb;
$gather_users = $wpdb->get_col("SELECT user_id FROM $wpdb->usermeta WHERE $wpdb->usermeta.meta_key = 'META_KEY_HERE' ORDER BY $wpdb->usermeta.meta_value ASC");
$all_users = $wpdb->get_results($gather_users);
return $all_users;

y cambie meta_key_here a su meta clave

Ustedes están haciendo demasiado trabajo: https://codex.wordpress.org/class_reference/wp_user_query

$args = array(
    'meta_query' => array(
        array(
            array(
                'key'     => 'YOUR_KEY',
                'value'   => 'whatever_value_you\'re_looking_for',
                'compare' => '='
            )
        )
    )
 );
$user_query = new WP_User_Query( $args );

Al igual que otras convenciones de tipo wp {{consulta}}, puede ordenar, limitar el recuento de resultados, etc ...

https://codex.wordpress.org/class_reference/wp_user_query

Editar - Advertencia: esto supone que está asignando datos de usuario personalizados a las tabla (s) de usuario anticipadas wp_core, que en el OP parece que es. Para tablas personalizadas, querrá obtener el enfoque de $ WPDB descrito por otro usuario

Licenciado bajo: CC-BY-SA con atribución
scroll top