MySQL 选择并排序欧元货币


MySQL select and sort Euro Currency

我有一个插件,用于根据自定义字段对Wordpress帖子进行排序。此字段是价格字段。该插件非常适合所有使用欧元和美元的国家。我有一个来自荷兰的客户,他使用欧元,但有特殊字符来定义美分。这些特殊字符将扳手扔进了导致排序错误的插件。

以下是用于检索和按价格排序的MySQL代码:

function price_sort_it() {
global $wpdb, $thisorder;
    if($thisorder == 'price-lowest') {
        $this_order = 'ASC';
    }
    else if($thisorder == 'price-highest') {
        $this_order = 'DESC';
    }
return "(SELECT CAST(REPLACE(REPLACE(REPLACE($wpdb->postmeta.meta_value, ',', ''), '€',''),' ','') AS SIGNED)
           FROM $wpdb->postmeta
          WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id
            AND $wpdb->postmeta.meta_key = 'ad_price')" . $this_order;
}
add_filter('posts_orderby', 'price_sort_it');

此代码删除了千逗号分隔符,并删除了排序前的货币符号。它完美无缺。

问题是荷兰客户的广告价格如下:

  • € 5
  • € 5,-
  • € 5,00

以及正常值,例如:

  • € 10,000
  • € 500.29
  • € 10

其中逗号表示小数,逗号和负数表示小数和 2 个零的缩写。

智者对如何解决这一壮举有什么话吗?

您将客户端的数字格式描述为不是"正常"格式。这对我来说是第一个警钟。

在任何

特定位置用点或逗号格式化数字都不是"正常"的。不同的国家/地区有不同的格式约定,实际上大多数国家/地区使用逗号作为小数点字符,使用点作为千位分隔符。这几乎适用于所有欧洲大陆国家。

因此,不要将您喜欢的格式视为"正常"。客户认为他们的格式是正常的,而你的格式很奇怪。客户是为此付费的人。

处理

此问题的标准方法是处理程序中所有未格式化的数字,并使用 PHP 的 number_format() 函数以客户端所需的格式显示它们。

例如:

$number_in_dutch_format = number_format($unformatted_number, 2, ',', '.');

您可以制作逗号并指向变量,以便可以在程序中对其进行配置,以便每个客户都可以使用他们喜欢的任何格式。

如果需要更复杂的格式设置,sprintf()等函数也可能很有用。

但是,您应该指定的一件事是,您应该坚持使用给定客户端的单一格式。

您还可以在SO上阅读有关该主题的其他问题,例如:PHP:区域设置感知数字格式

希望有帮助。