2

私は仮想テーブルを持っています (実名を使用したインデックスの便宜上)
テーブル: product_price
id: | 製品 | ヴァルータ | 場所 | 価格
-------------------------------------------------- -----------------
01 | ミルク | ユーロ | ロンドン | ロンドン | 20
02 | ミルク | 米ドル | ボストン| ボストン| 19
03 | ミルク | 円 | ボストン| ボストン| 180
04 | リンゴ | 米ドル | ボストン| ボストン| 200
05 | リンゴ | 米ドル | スプリングフィールド | 210

この配列を取得する方法は?

array(<br>
 array('id'=>01, 'product'=>milk,  'location'=>'Boston', 'price_USD'=>19, 'price_JPY'=>180),<br>
 array('id'=>02, 'product'=>apple, 'location'=>'Boston', 'price_USD'=>200)<br>
);
4

1 に答える 1

0

ベースクエリは次のようになります

SELECT MIN(id) id,
       MIN(location) location,
       product,
       MIN(CASE WHEN valuta = 'USD' THEN price END) price_usd,
       MIN(CASE WHEN valuta = 'JPY' THEN price END) price_jpy
  FROM product_price
 WHERE location = 'Boston'
 GROUP BY product
 ORDER BY id

出力:

| | ID | ロケーション | 製品 | PRICE_USD | PRICE_JPY |
-------------------------------------------------- -
| | 2 | ボストン | ボストン | ミルク | 19 | 180 |
| | 4 | ボストン | ボストン | リンゴ | 200 | (ヌル) |

これがSQLFiddleのデモです

今、私はコードイグナイターの専門家ではありませんが、コードイグナイターでは次のように見えるかもしれません

$result = $this->db
               ->select(
                'MIN(id) id,
                 MIN(location) location,
                 product,
                 MIN(CASE WHEN valuta = 'USD' THEN price END) price_usd,
                 MIN(CASE WHEN valuta = 'JPY' THEN price END) price_jpy')
               ->from('product_price')
               ->where(array('location' => 'Boston')
               ->group_by(array('product')
               ->order_by(array('id')
               ->get();
于 2013-06-29T19:30:13.707 に答える