3

商品の表があり、価格、通貨の2つのフィールドがあります。通貨フィールドで可能な値は1、2、3です。MDLの場合は1、USDの場合は2、EURの場合は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

これは、最初の製品の価格がUSDで保存され、2番目の製品の価格がEURで保存されていることを示しています。しかし、私はそれらをMDLvaluteでソートする必要があります。だから私は各値のレートの配列を取得します: $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

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 に答える
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 に応じてテーブル通貨から通貨値を選択し、最終的に結果は配給価格 * 通貨値で並べ替えられます。

一部の構成内で通貨のみが配列としてハードコードされている可能性があることは理解していますが、実際には通貨をDBに入れる方がよいでしょう(そうでない場合)。

于 2012-05-10T14:46:11.593 に答える