MySQL Query due tabelle di database, utenti e usermeta e ordina per valore int meta personalizzato

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

Domanda

Sto cercando di ottenere una vasta gamma di utenti del sito ordinati per un valore meta personalizzato (un int).

posso interrogare gli utenti proprio bene e farli tornare da utilizzare in un foreach. Al momento ho i risultati della query vengono di nuovo ordinati già da display_name dalla tabella degli utenti. Voglio che ordinare dal valore usermeta personalizzato.

Tutte le idee su come modificare questa query per ottenere questo fatto?

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;
}
È stato utile?

Soluzione

Non si ottiene una sorta corretta sulla colonna meta_value perché i valori memorizzati non ci sono trattati come valori interi, ma è possibile utilizzare un metodo simile a come è stato fatto è WordPress indietro quando stavamo usando meta_value_num fare smistamento, che sostanzialmente ha coinvolto aggiungendo un numero sul fronte dei dati.

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;
}

Questo poi ti dà una sorta corretta sulla colonna valore di meta.

pensato che avrebbe fatto piacere una funzione così si può chiamare ovunque ne abbiate bisogno, basta passare il tasto Meta si dispone di installazione per gli utenti, ed eventualmente modificare l'ordinamento.

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

ordine decrescente.

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

Si otterrà un array di oggetti restituiti proprio come prima, quindi darò per scontato di sapere come un ciclo su quei dati e appropriarsene per la visualizzazione, ecc ... (se non, pubblicare un commento).

Altri suggerimenti

provare:

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;

e cambiare META_KEY_HERE alla vostra chiave meta

ragazzi stanno facendo troppo lavoro: 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 );

Come altri WP {{query}} convenzioni tipo, è possibile OrderBy, limite di conteggio risultato, ecc ...

https://codex.wordpress.org/Class_Reference/WP_User_Query

modifica - Caveat: questo presuppone che si sta assegnando dati utente personalizzata al wp_core anticipato tabella utente (s) - che nel PO sembra che ci si trovi. Per le tabelle personalizzate, ti consigliamo di andare l'approccio $ wpdb descritto da un altro utente

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top