3

我有产品表,有 2 个字段:价格、货币。货币字段中的可能值为 1、2、3。1 代表 MDL,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");

嗯...我会尝试通过一个例子来解释。

我的桌子:

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['currency value from db, in our case 2] = 500 * 11.50

提前致谢。

4

2 回答 2

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 从表货币中选择货币值,最后按配给价格 * 货币值排序结果。

我知道,也许您在某些配置中仅将货币硬编码为数组,但将货币放入数据库确实会更好(如果不是)。

于 2012-05-10T14:46:11.593 回答
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
        "
        );
于 2012-05-11T11:54:18.197 回答