如何获取元值中值最大的数据库表行?

时间:2013-11-04 作者:Derfder

E、 g.我有一个元字段,名为car_number:

所以,通常我会尝试这样的方法来获得这个值:

$car_value = get_post_meta($post->ID, \'car_number\'); 
但问题是我只需要在car_number 最高,例如45。因此,我需要以某种方式获得最高值,并执行以下操作:

$post_ID = .. // here I need to get the ID of the post that has the biggest value in the fild car_value

$car_value = get_post_meta($post_ID, \'car_number\'); 
如何获取car\\u value meta字段中具有最高值(数字)的帖子的post\\u ID?

2 个回复
SO网友:kaiser

这个WP_Query 具有名为meta_query. 使用它可以按值或数值查询:

$car = new WP_Query( array(
    \'post_type\'      => array( \'cars\' ),
    \'meta_key\'       => \'car_number\',
    \'orderby\'        => \'meta_value_num\',
    \'posts_per_page\' => 1,
    \'order\'          => \'DESC\',
    \'cache_results\'  => true,
) );
$carNr = get_post_meta( $car->ID, \'car_number\', true );
// Inspect result
var_dump( $carNr );
现在,我们得到了正确的post类型、适当的元键并定义了要按其值排序的内容,我们只需要将结果限制为单个post,并按降序排列。当我们现在得到这篇文章时,我们可以很容易地抓住它的元价值。

另一种选择是执行普通查询:

global $wpdb;

$wpdb->get_var( 
    "SELECT {$wpdb->postmeta}.meta_value
     FROM {$wpdb->postmeta}
     WHERE 1=1
         AND {$wpdb->postmeta}.meta_key = \'car_number\'
     ORDER BY ABS( {$wpdb->postmeta}.meta_value ) DESC
     LIMIT 0,1"
);
根据保存值的方式(插件通常将数字/数字/整数保存为字符串),您可能需要在查询过程中转换值。在这种情况下,将订单按部分替换为

CAST( {$wpdb->postmeta}.meta_value as SIGNED INTEGER )
注意:如果没有负整数,可以使用UNSIGNED

CONVERT( {$wpdb->postmeta}.meta_value, SIGNED INTEGER )

SO网友:user9

尝试此方法

function end_meta_value( $end = "max", $meta )
{
    global $wpdb;
    $query = $wpdb->prepare( 
        "SELECT %s( cast( meta_value as UNSIGNED ) ) FROM {$wpdb->postmeta} WHERE meta_key=\'%s\'",
        $end,
        $meta
    );
    return $wpdb->get_var( $query );
}
发件人here. 对我来说效果很好。

结束

相关推荐