【发布时间】:2019-04-25 05:42:36
【问题描述】:
我想按喜欢的数量排序我的结果。我需要使用 sql 请求而不是新的查询参数。
在常规查询中,我应该使用
'orderby' => 'meta_value_num'
但因为它是我使用的 sql 请求
ORDER BY {$wpdb->prefix}postmeta.meta_value DESC;
这是我尝试过的:
$test = $wpdb->get_results ( "
SELECT *
FROM {$wpdb->prefix}postmeta
WHERE post_id LIKE '$get_the_ID_090909%' AND {$wpdb->prefix}postmeta.meta_key = '_liked' AND {$wpdb->prefix}postmeta.meta_value > 0
ORDER BY {$wpdb->prefix}postmeta.meta_value DESC;
" );
echo ' '.$test[0]->meta_value; // 2
echo ' '.$test[1]->meta_value; // 14
echo ' '.$test[2]->meta_value; // 10
正确的顺序应该是:
14
10
2
请注意,如果我使用“ASC”,则顺序为 10、14、2 如果我改变了类似的数字,它确实改变了位置。有时它是正确的顺序取决于喜欢的数量
var_dump():
array(3) { [0]=> object(stdClass)#7998 (4) { ["meta_id"]=> string(3) "756" ["post_id"]=> string(12) "179090909185" ["meta_key"]=> string(6) "_liked" ["meta_value"]=> string(1) "2" } [1]=> object(stdClass)#8000 (4) { ["meta_id"]=> string(3) "696" ["post_id"]=> string(12) "179090909176" ["meta_key"]=> string(6) "_liked" ["meta_value"]=> string(2) "14" } [2]=> object(stdClass)#8001 (4) { ["meta_id"]=> string(3) "697" ["post_id"]=> string(12) "179090909170" ["meta_key"]=> string(6) "_liked" ["meta_value"]=> string(2) "10" } }
【问题讨论】:
-
尝试 var_dump($test) 并发布结果
-
array(3) { [0]=> object(stdClass)#7998 (4) { ["meta_id"]=> string(3) "756" ["post_id"]=> string (12) "179090909185" ["meta_key"]=> string(6) "_liked" ["meta_value"]=> string(1) "2" } [1]=> object(stdClass)#8000 (4) { ["meta_id"]=> 字符串(3) "696" ["post_id"]=> 字符串(12) "179090909176" ["meta_key"]=> 字符串(6) "_liked" ["meta_value"]=> 字符串(2) "14" } [2]=> object(stdClass)#8001 (4) { ["meta_id"]=> string(3) "697" ["post_id"]=> string(12) "179090909170" ["meta_key"]=> string(6) "_liked" ["meta_value"]=> string(2) "10" } } Mis à jour il y a 10 heures • 3 个产品推荐
-
我发布了结果@Vishwa
-
meta_value列是 varchar,表示数字按字符串排序,而不是按数字排序。排序时尝试将列转换为 int。尝试类似:ORDER BY CAST({$wpdb->prefix}postmeta.meta_value AS UNSIGNED) ASC. -
另外,在添加输出/代码时,请编辑您的问题以包含它,而不是将大块代码/输出作为评论发布。