Php MySQL选择和排序欧元货币

Php MySQL选择和排序欧元货币,php,mysql,wordpress,Php,Mysql,Wordpress,我有一个插件,用于根据自定义字段对Wordpress帖子进行排序。此字段是价格字段。该插件适用于所有使用欧元和美元的国家。我有一个客户来自荷兰,他使用欧元,但有特殊的字符来定义美分。这些特殊字符对插件造成了影响,导致排序错误 以下是按价格检索和排序的MySQL代码: function price_sort_it() { global $wpdb, $thisorder; if($thisorder == 'price-lowest') { $this_order = '

我有一个插件,用于根据自定义字段对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欧元
以及正常值,如:

  • 10000欧元
  • 500.29欧元
  • 10欧元
其中逗号表示十进制,逗号和负数表示十进制和2个零的缩写


智者对如何解决这一问题有什么看法吗?

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

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

所以不要认为你的首选格式是“正常”格式。客户端认为它们的格式是正常的,而您的格式是奇怪的。客户才是支付费用的人

处理这一问题的标准方法是处理程序中未格式化的所有数字,并使用PHP语言以客户端要求的格式显示它们

例如:

$number_in_dutch_format = number_format($unformatted_number, 2, ',', '.');
您可以将逗号和点设置为变量,这样就可以在程序中对其进行配置,这样每个客户都可以使用他们喜欢的格式

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

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

你也可以在这里阅读关于这个主题的其他问题,比如:


希望能有所帮助。

这三种情况是唯一的吗?仅供参考,荷兰不是一个国家。它是荷兰西部的一个地区。荷兰有12个省,南、北荷兰仅为其中两个。抱歉离题:)问题是客户培训,培训他/她价格的格式。@Dragon-lol相信我,我同意!他们需要参与这个项目,你可能会觉得很有趣,但培训是最重要的部分之一。