2

我正在尝试使用 meta_query 参数来获取两个值之间的值的帖子,问题是它不适用于所有数字。

这是工作:

$array[] = array(
    'key' => 'd_weight',
    'value' => array(0,0.5),
    'compare' => 'BETWEEN',
    'type' => 'NUMERIC'
);

但由于某种原因,这不起作用:

$array[] = array(
    'key' => 'd_weight',
    'value' => array(0.1,0.5),
    'compare' => 'BETWEEN',
    'type' => 'NUMERIC'
);

问题只出现在小于 1 的数字上,在更大的数字上没有问题...

谢谢您的帮助。

4

2 回答 2

4

对于十进制数,您应该使用“DECIMAL”代替“NUMERIC”

$array[] = array(
    'key' => 'd_weight',
    'value' => array(0.1,0.5),
    'compare' => 'BETWEEN',
    'type' => 'DECIMAL'
);
于 2013-01-25T13:59:39.690 回答
2

Mridul 的回答部分正确,但在 OP 的情况下还有更多内容,特别是在处理 BETWEEN 比较时。从 type=NUMERIC 更改为 type=DECIMAL 后,您还需要特殊处理来过滤 WP 类型转换为 DECIMAL 数据类型的方式(否则它将使用默认精度。)以下非常粗略的示例:

function wp_get_meta_sql_cast_decimal_precision($meta_query) {
    $meta_query['where'] = str_replace('DECIMAL', 'DECIMAL(10,3)', $meta_query['where']);
    return $meta_query;
}
add_filter('get_meta_sql', 'wp_get_meta_sql_cast_decimal_precision');
于 2013-09-23T17:23:17.257 回答