MySQL Abfragen Sie zwei Datenbanktabellen, Benutzer und USERMETA und sortieren Sie nach benutzerdefiniertem Meta -Int -Wert

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

Frage

Ich versuche, eine Reihe von Site -Benutzern zu erhalten, die nach einem benutzerdefinierten Metawert (einem INT) sortiert sind.

Ich kann die Benutzer gut abfragen und sie wieder in einem Foreach verwenden. Ich habe derzeit die Abfrageergebnisse zurück, die bereits nach Anzeige_Name aus der Benutzertabelle sortiert werden. Ich möchte, dass es nach dem benutzerdefinierten Usmeta -Wert sortiert.

Irgendwelche Ideen, wie man diese Abfrage modifiziert, um dies zu erledigen?

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;
}
War es hilfreich?

Lösung

Sie werden keine richtige Sorte auf der meta_value Spalte, weil die dort gespeicherten Werte nicht als Ganzzahlwerte behandelt werden, aber Sie können eine Methode verwenden, die ähnlich wie sie es wieder gemacht hat, als wir es verwendet haben meta_value_num Sortieren, was im Grunde genommen dazu beinhaltete, eine Zahl auf die Vorderseite der Daten hinzuzufügen.

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

Dies gibt Ihnen dann eine ordnungsgemäße Sortierung in der META -Wertspalte.

Sie können eine Funktion mögen, damit Sie sie überall dort aufrufen können, wo Sie sie benötigen. Übergeben Sie sie einfach den Metaschlüssel, den Sie für Benutzer eingerichtet haben, und ändern Sie optional die Sortierreihenfolge.

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

Absteigend sortieren.

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

Sie erhalten eine Reihe von Objekten, die genau wie zuvor zurückgegeben werden. Ich gehe also davon aus, dass Sie wissen, wie Sie diese Daten überschreiten und sie für die Anzeige usw. angemessen sind (wenn nicht, einen Kommentar veröffentlichen).

Andere Tipps

Versuchen :

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;

und ändern Sie meta_key_here in Ihren Metaschlüssel

Ihr macht zu viel Arbeit: 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 );

Wie bei anderen WP {{Abfrage}} Geben Sie Konventionen an, können Sie bestellen, die Ergebnisanzahl beschränken usw.

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

Bearbeiten - Vorbehalt: Dies setzt voraus, dass Sie den erwarteten Benutzertabellen (n) benutzerdefinierte Benutzerdaten zuweisen - was in der OP so aussieht. Für benutzerdefinierte Tabellen möchten Sie den von einem anderen Benutzer beschriebenen $ WPDB -Ansatz wählen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top