通过元键而不是ID获取所有用户元

时间:2015-02-20 作者:Thought Space Designs

我试图比较用户元值以找到最高值和最低值。我设置了一个名为“hourly\\u rate”的用户元值。我想获得所有用户的小时费率,然后运行PHPmin()max() 在这些值上查找我所有用户的最低和最高小时费率。

目前,我正在通过从数据库中获取所有用户并迭代foreach循环来实现这一点,为每个用户获取特定的元密钥并将其存储在一个数组中。然后在该数组上运行min和max。

随着网站在用户中的扩展,仅仅找到一个最小值和最大值似乎会变得相当麻烦。有没有办法让我get_user_meta() 按键而不是ID?

例如,我目前正在执行以下操作:

$users = new WP_User_Query(array(
    \'order\' => \'DESC\',
    \'fields\' => \'all_with_meta\'
));

$hourly_rates_array = array();

foreach($users->results as $user){
    $hourly_rate = get_user_meta($user->ID, \'hourly_rate\', true);
    array_push($hourly_rates_array, $hourly_rate);
}

//Find the necessary limits for each user

$lowest_hourly_rate = min($hourly_rates_array);
$highest_hourly_rate = max($hourly_rates_array);
我有没有办法做到这一点:

$hourly_rates_array = get_user_meta(\'ALL\', \'hourly_rate\', true);

$lowest_hourly_rate = min($hourly_rates_array);
$highest_hourly_rate = max($hourly_rates_array);
哪种方法可以直接访问wp\\u usermeta表,而不是通过wp\\u用户和wp\\u usermeta跳转?这将极大地减少我的DB查询并提高性能,但我似乎无法找到一种通过键而不是通过用户ID获取user\\u meta的方法。

1 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

两个选项。第一种方法将使您远离自定义SQL,并且应该比您当前拥有的更高效。

它运行两个查询,一个是获取小时费率最高的用户ID,另一个是获取小时费率最低的用户ID。您还需要一个查询来更新用户元缓存;那么你就可以自由回家了:

$query = new WP_User_Query;
$users = array(
    \'min_user\' => \'ASC\',
    \'max_user\' => \'DESC\',
);

foreach ( $users as $var => $order ) {
    $query->query(
        array(
            \'count_total\' => false, // Save SQL_CALC_FOUND_ROWS, don\'t need it
            \'meta_key\' => \'hourly_rate\',
            \'orderby\' => \'meta_value\',
            \'fields\' => \'ID\', // Don\'t waste memory
            \'number\' => 1, // Just need the first user ID of the result
            \'order\' => $order,
        )
    );

    if ( $data = $query->get_results() )
        $$var = $data[0]; // User ID
    else
        $$var = 0;
}

update_meta_cache( \'users\', array( $min_user, $max_user ) );

echo get_post_meta( $max_user, \'hourly_rate\', true ); // Highest hourly rate
echo get_post_meta( $min_user, \'hourly_rate\', true ); // Lowest hourly rate
第二个是一个自定义SQL查询:

$rates = $wpdb->get_row( "SELECT MAX( CAST( meta_value AS UNSIGNED ) ) AS max_rate, MIN( CAST( meta_value AS UNSIGNED ) ) AS min_rate FROM $wpdb->usermeta WHERE meta_key = \'hourly_rate\'" ); 

echo $rates->max_rate;
echo $rates->min_rate;
没有比这更瘦的了!

结束