【问题标题】:codeigniter sql table conversioncodeigniter sql表转换
【发布时间】:2013-06-27 08:27:00
【问题描述】:

我有假表(为方便索引使用实名)
表:product_price
编号: |产品 |价值 |位置 |价格
-------------------------------------------------- ----------------
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>
);

【问题讨论】:

  • 为什么数组中第一个元素的id是1?在 db 中是 2。或者它不再是一个 id 而只是一个序号?

标签: mysql sql codeigniter join


【解决方案1】:

您的基本查询可能如下所示

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多