2016-09-15 19 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); 

THATをCANCELに沿って、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); 

Iステートメントが最初に(誤った)例で使用できるさまざまな形を混合しました。

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

私のために働いた正確な構文です。エラー番号:1064 - SQL構文にエラーがあります。 '= 1 THEN' foo 'WHEN = 2 THEN'バー 'ELSE' N/A 'END' 'User Options'、 '行1で使用する正しい構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください – 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 select_list 
     WHEN 1 THEN 'foo' 
     WHEN 2 THEN 'bar' 
     ELSE 'N/A' 
    END   AS `User Options` 
", FALSE); 
+0

いいです。私はシンタックスを混ぜ合わせたと思う。 CASEの後の式はオプションです。それがなければあなたの答えは正しいです。私の修正された答えを見てください。 – DFriend

関連する問題