php - MYSQL排序函数,根据数据库字段值作为数组键进行算术运算

标签 php mysql cakephp

我有产品表,其中有 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/

相关文章:

javascript - 在javascript中获取数组中所有按钮的id

php - 如何使用多个Auth组件?

php - 如何使用AWS API Gateway Http发布数据?

php - Woocommerce:支付网关自定义感谢页面

如果未选中复选框,PHP 会更新数据库

mysql - 根据条件计数和排除

mysql - Orbeon - MySQL 连接问题

php - 自动完成小部件由于某种原因无法工作......(jQuery Autocomplete With MySQL And PHP)

php - 将更改写回 Zend Dom 查询对象

mysql - 更新 500 多个字段记录以包含增量值 + 属性值