【发布时间】:2018-04-12 18:45:08
【问题描述】:
我正在使用 wordpress,网站上有产品,产品价格是后端的自定义字段。
我有一个页面,产品应按价格从高到低排序,反之亦然。
我的 Sql 查询如下所示:
SELECT * FROM `wp_postmeta` WHERE meta_key = 'product_price' ORDER BY meta_value ASC
上面的查询没有将价格从低到高排序。
但是当我尝试按以下方式进行操作时,它可以完美运行:
$args = array(
'post_type' => 'product-items',
'meta_key' => 'product_price',
'orderby' => 'meta_value',
'order' => 'ASC',
'post_status' => 'publish',
'posts_per_page'=> -1
);
$productList = get_posts($args);
在数据库中,我看到 meta_value 列类型是 longtext。也许这就是为什么它没有正确排序的问题。但它怎么会以第二种方式工作。
我会选择第二个选项,但我的代码需要通过 sql 查询来完成,具体取决于其他一些事情。
【问题讨论】:
-
试试
ORDER BY cast(meta_value as unsigned) ASC -
出于这个原因,在使用 EAV 模型时,我喜欢根据它们的类型来分离属性 - 所以,通常,一个整数类型的表,一个日期类型的表,一个表小数的东西。和一个字符串表。 (
ORDER BY meta_value + 0也可以) -
@juergend 非常感谢,完美运行
标签: php mysql sql wordpress advanced-custom-fields