我有产品表,其中有 2 个字段:价格、货币。货币字段中的可能值为 1、2、3。 MDL 1 个,美元 2 个,欧元 3 个。我必须按 mdl 货币的价格对我的产品进行排序。所以我有一个包含比率的数组:
$v = array(1,11.38,15.8);
请帮助我查询,我已经尝试过类似的操作,但我遇到了错误:
$results = $this->Product
->query("SELECT `id`,`price`,`currency` FROM products
ORDER BY price*$v[currency] DESC");
嗯...我会尝试通过一个例子来解释。
我的 table :
id|price|currency
_________________
1 | 500 | 2
2 | 300 | 3
显示第一个产品价格以美元保存,第二个产品价格以欧元保存。但我必须在 MDL 值中对它们进行排序。所以我得到了每个值的一组费率:
$rates = array([1] => 1, [2] => 11.50, [3] => 15.50);
所以我必须按照公式的结果来订购我的产品:price*value rate
在第一种情况下:500*$rates['来自 db 的货币值,在我们的例子中为 2] = 500 * 11.50
等
提前致谢。
最佳答案
由于这个问题的扩展示例,我已经编辑了这个查询。
让我们假设货币也存储在某个表中,比方说 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 从表货币中选择货币值,最终结果按口粮价格 * 货币值排序。
我知道也许您在某些配置中仅将货币硬编码为数组,但将货币放入数据库(如果不是)确实会更好。
关于php - MYSQL排序函数,根据数据库字段值作为数组键进行算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536447/