2016-09-15 57 views
0

我正在使用CodeIgniter v2.2.4導出爲CSV時操作數據?

請考慮以下代碼,以導出/下載代表數據庫查詢結果的CSV文件。

CONTROLLER

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

MODEL

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值爲01,或2而這插入CSV導出。如何將這些值操縱爲我最終的CSV文件中更有意義的文本?

例子:

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

回答

1

最簡單方法是沿着這些線路

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

取消,使用select語句!這是錯誤的。

它應該是使用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); 

我被混合的不同的形式的聲明可以在第一(不正確的)例如使用。

+0

獲取數據庫錯誤出於某種原因。錯誤編號:1064 - 您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第1行使用'= 1 THEN'foo'WHEN = 2 THEN'bar'ELSE'N/A'END'作爲'用戶選項'''時使用正確的語法 – Sparky

+0

確定你的字段數據類型是什麼。嘗試單引號值例如'WHEN ='1'' – DFriend

+0

數據類型不是問題。 'CASE select_list WHEN = 1'是問題。必須使用'CASE WHEN select_list = 1'。看到我的答案。 – Sparky

0

這是爲我工作的確切語法...

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

好的。我想我混合了我的語法。 CASE之後的表達式是可選的。沒有它,你的答案是正確的。看到我修正的答案。 – DFriend