【问题标题】:MySQL select and sort Euro CurrencyMySQL选择和排序欧元货币
【发布时间】:2012-08-13 19:40:31
【问题描述】:

我有一个插件,用于根据自定义字段对 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 个零的缩写。

关于如何应对这一壮举的任何智者的话?

【问题讨论】:

  • 只有这三种情况吗?
  • 仅供参考,荷兰不是一个国家。它是荷兰西部的一个地区。荷兰有12个省,北荷兰和南荷兰只是其中的2个。抱歉跑题了:)
  • 问题是客户培训,培训他\她必须采用什么格式的价格。
  • @Dragon -lol 相信我,我同意!他们需要使用该程序大声笑
  • 你可能觉得这很有趣,但训练是最重要的部分之一。

标签: php mysql wordpress


【解决方案1】:

您将客户的数字格式描述为不是“正常”格式。这是我的第一个警钟。

在任何特定位置用点或逗号格式化数字都不是“正常”或其他方式。不同的国家有不同的格式约定,事实上大多数 国家使用逗号作为小数字符,点作为千位分隔符。这几乎适用于所有欧洲大陆国家。

因此,不要将您喜欢的格式视为“正常”。客户认为他们的格式正常,而您的格式很奇怪。客户就是为此买单的人。

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

例如:

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

您可以将逗号和点设置为变量,这样您就可以在您的程序中对其进行配置,这样每个客户都可以使用他们喜欢的任何格式。

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

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

您还可以在 SO 上阅读有关该主题的其他问题,例如:PHP: Locale aware number format

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多