导出到 CSV 时操作数据?

Manipulate data when exporting to CSV?

我正在使用 CodeIgniter v2.2.4

考虑以下代码 export/download 表示数据库查询结果的 CSV 文件。

控制器:

public function export_csv($id = NULL)
{   
    $this->load->dbutil();
    $this->load->helper('download');

    $query = $this->my_model->create_csv($id);  // call the model

    $data = $this->dbutil->csv_from_result($query, ',');

    force_download( $id . '.csv', $data );
}

型号:

public function create_csv($id)
{
    $this->db->from('mytable');

    $this->db->where('id', $id);

    $this->db->select('
        id            AS `ID`,
        full_name     AS `Full Name`,
        company_name  AS `Company Name`,
        phone         AS `Phone Number`,
        select_list   AS `User Options`
    ', FALSE);

    return $this->db->get();
}

上面的代码有效,但是 select_list 值为 012,并且已插入到 CSV 导出中。我如何才能将这些值转化为对我的最终 CSV 文件更有意义的文本?

示例:

'DB value' => 'insert into CSV'
         0 => 'N/A',
         1 => 'foo',
         2 => 'bar'

最简单的方法是按照这些行使用 select 语句

$this->db->select(
   "id            AS `ID`,
    full_name     AS `Full Name`,
    company_name  AS `Company Name`,
    phone         AS `Phone Number`,
    CASE select_list WHEN = 1 THEN 'foo' WHEN = 2 THEN 'bar' ELSE 'N/A' END
    AS `User Options`", FALSE);

取消!错了。

在CASE后面使用可选的expression时应该是这样的,即CASE select_list ...

$this->db->select(
   "id            AS `ID`,
    full_name     AS `Full Name`,
    company_name  AS `Company Name`,
    phone         AS `Phone Number`,
    CASE select_list WHEN 1 THEN 'foo' WHEN 2 THEN 'bar' ELSE 'N/A' END
    AS `User Options`", FALSE);

我在第一个(不正确的)示例中混合了语句可以使用的不同形式。

这正是对我有用的语法...

$this->db->select("
    id            AS `ID`,
    full_name     AS `Full Name`,
    company_name  AS `Company Name`,
    phone         AS `Phone Number`,
    CASE
        WHEN select_list = 1 THEN 'foo' 
        WHEN select_list = 2 THEN 'bar' 
        ELSE 'N/A'
    END           AS `User Options`
", FALSE);

这个变体也有效...

$this->db->select("
    id            AS `ID`,
    full_name     AS `Full Name`,
    company_name  AS `Company Name`,
    phone         AS `Phone Number`,
    CASE select_list
        WHEN 1 THEN 'foo' 
        WHEN 2 THEN 'bar' 
        ELSE 'N/A'
    END           AS `User Options`
", FALSE);