SQL查询中的函数。可能吗?

时间:2018-03-31 11:39:30

标签: php mysql sql wordpress

所以,在上一个问题中,我问过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';

我感谢任何帮助或想法

2 个答案:

答案 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.10.72.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