所以,在上一个问题中,我问过previous question
并没有得到任何答案,所以我从我的previous question得到了一个想法,使其更紧凑,所以我想,是否可以在SQL查询中调用函数?
所以这是我现在的条件,我有一个使用API转换价格的功能,我想按价格对其进行排序,但问题是每个产品都有不同的货币。
实施例
产品A - 1,800美元
产品B - IDR 1,900,000
产品C - 1,000欧元
因此,如果我只是根据数据库中的价格进行排序,它会搞砸,因为货币不同。所以我想让来自mysql的所有数据自动更改为以美元定价(默认情况下,此时是需要的功能)
$args=array(
'meta_key' => 'monthly',
'meta_value' => 'yes',
'posts_per_page' => 12,
'paged' => $paged
);
$mam_global_fields = ', price.meta_value'; // I want to change this
$mam_global_join = "
INNER JOIN " . $wpdb->postmeta . " AS currency ON (" . $wpdb->posts . ".ID = currency.post_id AND currency.meta_key = 'monthly_currency')
INNER JOIN " . $wpdb->postmeta . " AS price ON (" . $wpdb->posts . ".ID = price.post_id AND price.meta_key = 'monthly_price')
";
mam_global_orderby="total_price ASC";
...对于这样的事情,但我不知道该怎么做,但它是这样的或类似的这样或我的previous question
$mam_global_fields = ', price.meta_value, '. convert_price('price.meta_value', 'currency.meta_value') . ' AS total_price';
我感谢任何帮助或想法
答案 0 :(得分:1)
您可以使用存储功能,此功能可以将货币类型和值作为输入参数,并返回usd值。然后,您可以在您需要的SQL查询中调用此函数。
答案 1 :(得分:1)
为什么不使用CASE
?
SQLFiddle:http://sqlfiddle.com/#!9/fd178a/15/0
示例:
SELECT id, name, CASE currency
WHEN "USD" THEN price * 1.1
WHEN "RUB" THEN price * 0.7
WHEN "CND" THEN price * 2.8
END as price
FROM book
ORDER BY price DESC
1.1
,0.7
和2.8
是基本/主要货币转换的基本系数。
<强>更新强>
...或者你可以使用MySQL JSON类型来创建这样的东西:
CREATE TABLE book (id INT PRIMARY KEY, name VARCHAR(60), price REAL, currency VARCHAR(10));
INSERT INTO book VALUES (1, "book 1", 1.20, "USD");
INSERT INTO book VALUES (2, "book 2", 100.0, "CND");
INSERT INTO book VALUES (3, "book 3", 12.20, "RUB");
SET @currency := '{"CND": 0.8, "RUB": 1.7, "JPN": 0.34, "USD": 1.0}';
SELECT id, name, JSON_EXTRACT(@currency, CONCAT('$.', currency)) * price as price
FROM book
ORDER BY price DESC;
SQLFiddle:http://rextester.com/JNLNE4909