2012-05-10 1 views
3

私には製品テーブルがあり、価格、通貨の2つのフィールドがあります。通貨フィールドに指定できる値は1,2,3です。 MDLは1、USDは2、EURは3です。私はmdl通貨で価格で私の製品を並べ替える必要があります。だから私は速度を持つ配列があります。私のクエリとデータベースフィールド値を配列キーとして使用する算術演算に依存するMYSQLソート関数

$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に保存され、第二の製品価格はEURに保存されていることを示しています。しかし、私は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など事前に

感謝を。

答えて

3

この問題の拡張された例のため、私はこのクエリを編集しました。 通貨は何らかのテーブルに保存されていると仮定して、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に応じて、テーブルの通貨と通貨の値を選択し、このクエリでは、次のように

currencyにする必要がありますテーブルと最終的には、結果は配当価格*の通貨値で並べられます。

私は多分あなたは一部の設定内で配列としてハードコードされた通貨を持っていることを理解していますが、実際にはDBに通貨を入れるほうが良いでしょう。

+0

私は配列のキーとしてフィールド名を使用しようとすると、私は、このクエリの構文エラーが発生します。 –

+0

@АлександрЛазаревAaah - '$ v [currency]'の 'currency'は列の名前で、このインデックスは' $ v'配列に存在しません。もしそうなら、これを代わりに試してください: 'SELECT id、price、currency、price * currency AS ratio from FROM products ORDER BY ratio DESC'。 – shadyyx

+0

うーん...私は例を説明しようとします。 私のテーブル: id | price | currency _________________ 1 | 500 | 2 2 | 300 | 3 これは、最初の製品価格がUSDで保存され、2番目の製品価格がEURで保存されていることを示しています。しかし、私はMDLのvaluteでそれらを並べ替える必要があります。だから私は各値のレートの配列を取得: $レート=配列([1] => 1、[2] => 11.50、[3] => 15.50); だから私の式の結果によって、私の製品を注文する必要があります。価格*値率 最初のケースで:500 * $速度[私たちのケース2におけるデシベルから「通貨の値、] = 500 * 11.50など –

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 
     " 
     ); 
+0

ありがとう、本当に便利でした。 –

関連する問題