2

我有假设表(为方便索引使用实名)
表:product_price
id:| 产品 | 价值 | 位置 | 价格
------------------------------------------------ -----------------
01 | 牛奶| 欧元 | 伦敦 | 20
02 | 牛奶| 美元 | 波士顿| 19
03 | 牛奶| 日元 | 波士顿| 180
04 | 苹果| 高分辨率照片| CLIPARTO 美元 | 波士顿| 200
05 | 苹果| 高分辨率照片| CLIPARTO 美元 | 斯普林菲尔德 | 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

输出:

| 身份证 | 位置 | 产品 | PRICE_USD | PRICE_JPY |
-------------------------------------------------- -
| 2 | 波士顿 | 牛奶| 19 | 180 |
| 4 | 波士顿 | 苹果| 高分辨率照片| CLIPARTO 200 | (空) |

这是SQLFiddle演示

现在我不是 codeigniter 专家,但在 codeigniter 中它可能看起来

$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 回答