我有产品表,有2个字段:价格,货币。货币字段中的可能值为1,2,3。 1表示MDL,2表示USD,3表示EUR。我必须以mdl货币的价格对我的产品进行分类。所以我有一个包含费率的数组:
$v = array(1,11.38,15.8);
请用我的查询帮助我,我尝试了类似的东西,但我有错误:
$results = $this->Product
->query("SELECT `id`,`price`,`currency` FROM products
ORDER BY price*$v[currency] DESC");
嗯......我会试着通过一个例子来解释。
我的表:
id|price|currency
_________________
1 | 500 | 2
2 | 300 | 3
显示第一个产品价格以美元保存,第二个产品价格以欧元保存。但我必须在MDL valute中对它们进行排序。所以我得到每个值的一系列费率:
$rates = array([1] = > 1, [2] => 11.50, [3] => 15.50);
所以我必须按公式price*value rate
在第一种情况下:500*$rates['currency value from db, in our case 2] = 500 * 11.50
等。
提前致谢。
答案 0 :(得分:3)
由于此问题的扩展示例,我编辑了此查询。
让我们假设货币也存储在某些表格中,比方说currency
(如果没有,它应该是无论如何)。
表currency
应如下所示:
ID VALUE CODE
-----------------------------
1 1 USD
2 11.38 EUR
3 15.8 MDL
然后查询应该是:
SELECT p.`id`, p.`price`, p.`price` * c.`value` AS 'ratio'
FROM products p
LEFT JOIN currency c ON c.`id` = p.`currency`
ORDER BY `ratio` DESC
通过此查询您可以根据产品表中的货币ID从表格货币中选择货币值,最后按配给价格*货币值排序结果。
据我所知,也许您在某些配置中只将货币硬编码为数组,但将货币放入数据库(如果不是)确实会更好。
答案 1 :(得分:3)
你不能使用数据库列名作为数组键,因为mysql是后来的实例而不是php。在php中,您只需生成传递给数据库管理系统的查询字符串 您的查询应如下所示:
$results = $this->Product->query
(
"SELECT `id`,`price`,
CASE `currency`
WHEN '1' THEN $v[0]
WHEN '2' THEN $v[1]
WHEN '3' THEN $v[2]
END AS 'ratio'
FROM products
ORDER BY price*ratio DESC
"
);