MySQLクエリ2つのデータベーステーブル、ユーザーとUsermeta、およびカスタムメタ値ごとにソート
質問
カスタムメタ値(int)でソートされたサイトユーザーの配列を取得しようとしています。
ユーザーは問題なくクエリをして、Foreachで使用するように戻すことができます。現在、ユーザーテーブルのdisplay_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
列に保存されている値は、整数値として扱われていないためですが、使用したときにそれが行われた方法と同様の方法を使用できます 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;
}
これにより、メタ値列に適切なソートが得られます。
関数が好きなので、必要な場所に呼び出すことができ、ユーザー向けにセットアップしたメタキーを渡し、オプションでソートオーダーを変更できます。
$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
編集 - 警告:これは、カスタムユーザーデータをWP_CORE予想ユーザーテーブルに割り当てていることを前提としています。これはOPでは、あなたのように見えます。カスタムテーブルについては、別のユーザーが説明した$ wpdbアプローチに進みます。