MySQL запрос две таблицы базы данных, пользователи и userMeta и сортируйте по пользовательскому значению Meta int

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

Вопрос

Я пытаюсь получить множество пользователей сайта, отсортированного по пользовательской мета -значении (int).

Я могу просто запрашивать пользователей и вернуть их к использованию в Foreach. В настоящее время у меня есть результаты запроса, отсортированные уже по DISPLACE_NAME из таблицы пользователей. Я хочу, чтобы это сортировало по пользовательскому значению usermeta.

Есть идеи о том, как изменить этот запрос, чтобы сделать это?

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;
}
Это было полезно?

Решение

Вы не получите должного сортировки на meta_value столбец, потому что хранимых значений не рассматриваются как целочисленные значения, но вы можете использовать метод, аналогичный тому, как это было сделано WordPress, когда мы использовали meta_value_num Сортировать, что в основном включало добавление числа в переднюю часть данных.

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

Затем это дает вам правильную сортировку на столбце Meta Value.

Подумал, что вам может понравиться функция, поэтому вы можете назвать ее везде, где она вам нужна, просто передайте ее мета -ключ, который у вас есть для пользователей, и, необязательно, изменить порядок сортировки.

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

Сортировать нисходящее.

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

Вы получите массив объектов, возвращаемых так же, как и раньше, поэтому я предполагаю, что вы знаете, как зацикливаться на этих данных, и уместить их для отображения и т. Д. (Если нет, опубликовать комментарий).

Другие советы

пытаться :

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;

и изменить meta_key_here на свой мета -ключ

Вы, ребята, делаете слишком много работы: 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 );

Как и другие конвенции типа wp {{Query}}, вы можете заказать, ограничить количество результатов и т. Д.

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

РЕДАКТИРОВАТЬ - CAVEET: Это предполагает, что вы назначаете пользовательские пользовательские данные ожидаемым пользовательским таблицам WP_CORE - которые в OP выглядит так, как вы. Для пользовательских таблиц вы захотите использовать подход $ WPDB, описанный другим пользователем

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top