我有以下查询让我疯了:
$getLowestPriceN = $wpdb->get_results("SELECT *
FROM $table
WHERE post_id = '$post->post_id'
AND meta_key = '_wholesale_price'
ORDER BY meta_value ASC ");
我试图按“meta_value”排序结果,所有元值都是数字。如果我将其从ASC更改为DESC并不重要,绝对没有任何变化。
任何人都可以看到上述内容有什么问题吗?
数据存储在默认的wordpress postmeta表中。我确信这可以解答一些人的问题。
我现在尝试了以下内容:
$getLowestPriceN = $wpdb->get_results("SELECT * FROM $table WHERE post_id = '$post->post_id' AND meta_key = '_wholesale_price' ORDER BY CAST('meta_value' AS DECIMAL) ASC");
foreach ( $getLowestPriceN as $postN ){
$price = $postN->meta_value;
}
return $price
这仍然没有命令结果加入......
答案 0 :(得分:0)
$getLowestPriceN = $wpdb->get_results("SELECT *
FROM `$table`
WHERE post_id = '$post->post_id'
AND meta_key = '_wholesale_price'
ORDER BY meta_value ASC ");
现在试试,可能适用于那些``围绕$ table
或尝试
$post_id = $post->post_id;
$getLowestPriceN = $wpdb->get_results("SELECT *
FROM `$table`
WHERE post_id = '$post_id'
AND meta_key = '_wholesale_price'
ORDER BY meta_value ASC ");
答案 1 :(得分:0)
如果meta_value
是char / varchar列中的数值,那么(a)坏主意和(b)您可以使用CAST
以数字方式对其进行排序。
如果所有数字都是整数,则可以投射为SIGNED
:
SELECT *
FROM myTable
WHERE post_id = whatever
AND meta_key = '_wholesale_price'
ORDER BY CAST(meta_value AS SIGNED)
如果某些或所有数字都有小数(可能包含名为_wholesale_price
的内容),则需要转换为DECIMAL
:
SELECT *
FROM myTable
WHERE post_id = whatever
AND meta_key = '_wholesale_price'
ORDER BY CAST(meta_value AS DECIMAL(12, 2))
示例中的DECIMAL(12,2)
是猜测;如果您的值可能更大(或者小数超过2位),则需要相应地更改投射类型。