导出到 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
值为 0
、1
或 2
,并且已插入到 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);
我正在使用 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
值为 0
、1
或 2
,并且已插入到 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);