【问题标题】:Manipulate data when exporting to CSV?导出到 CSV 时操作数据?
【发布时间】:2023-03-07 05:33:01
【问题描述】:

我正在使用 CodeIgniter v2.2.4

考虑使用以下代码导出/下载代表数据库查询结果的 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'

【问题讨论】:

    标签: php mysql codeigniter csv codeigniter-2


    【解决方案1】:

    这是对我有用的确切语法...

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

    【讨论】:

    • 好一个。我想我混合了我的语法。 CASE 之后的表达式是可选的。没有它,你的答案是正确的。请参阅我修改后的答案。
    【解决方案2】:

    最简单的方法是按照这些思路使用 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);
    

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

    【讨论】:

    • 由于某种原因出现数据库错误。错误号:1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '= 1 THEN 'foo' WHEN = 2 THEN 'bar' ELSE 'N/A' END AS User Options,' 附近使用正确的语法
    • 不确定您的字段数据类型是什么。尝试单引用值,例如WHEN = '1'
    • 数据类型不是问题。 CASE select_list WHEN = 1 是问题所在。必须使用CASE WHEN select_list = 1。看我的回答。
    猜你喜欢
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多