mysql命令根本不工作

时间:2013-08-05 18:07:54

标签: php mysql

我有以下查询让我疯了:

$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表中。我确信这可以解答一些人的问题。

编辑2:

我现在尝试了以下内容:

$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

这仍然没有命令结果加入......

2 个答案:

答案 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位),则需要相应地更改投射类型。