-2

我有以下让我发疯的查询:

$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

这仍然没有对结果进行排序......

4

2 回答 2

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 ");
于 2013-08-05T18:15:17.827 回答
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 个小数位),您需要相应地更改强制转换类型。

于 2013-08-05T18:19:55.163 回答