2013-01-01 54 views
2

任何人都可以將此查詢轉換爲活動記錄codeigniter?codeigniter中的有效記錄

SELECT b.name, 
    SUM(CASE WHEN c.size = 'S' THEN 1 ELSE 0 END) S, 
    SUM(CASE WHEN c.size = 'M' THEN 1 ELSE 0 END) M, 
    SUM(CASE WHEN c.size = 'L' THEN 1 ELSE 0 END) L, 
    SUM(CASE WHEN c.size = 'XL' THEN 1 ELSE 0 END) XL 
    FROM orderTB a 
    INNER JOIN productTB b 
     ON a.id_product = b.id_shirt 
    INNER JOIN sizeTB c 
     ON a.id_size = c.id_size 
GROUP BY b.name 

我已經試過這樣

function get() 
{ 
    $this->db->select("b.name,SUM(CASE WHEN c.size ='S' THEN 1 ELSE 0 END) as S,SUM(CASE WHEN c.size = 'M' THEN 1 ELSE 0 END) as M,SUM(CASE WHEN c.size = 'L' THEN 1 ELSE 0 END) as L,SUM(CASE WHEN c.size = 'XL' THEN 1 ELSE 0 END) as XL"); 

$this->db->from('order'); 
$this->db->join('ukuran','order.id_size=ukuran.id_size'); 
$this->db->where('date',$date); 
return $this->db->get(); 
} 

,但其錯誤

+0

不該你更願意選擇'b.name,c.size,COUNT(*)FROM ... GROUP BY b.name,c.size',然後重新組織數據? – 2013-01-01 11:42:51

+0

將FALSE添加爲您的第二個參數 –

回答

10

只是試試這個,讓我知道,

$this->db->select("b.name,SUM(CASE WHEN c.size = 'S' THEN 1 ELSE 0 END) S,SUM(CASE WHEN c.size = 'M' THEN 1 ELSE 0 END) M,SUM(CASE WHEN c.size = 'L' THEN 1 ELSE 0 END) L,SUM(CASE WHEN c.size = 'XL' THEN 1 ELSE 0 END) XL", FALSE); 
$this->db->from('orderTB a'); 
$this->db->join('productTB b','a.id_product = b.id_shirt','inner'); 
$this->db->join('sizeTB c','a.id_size = c.id_size','inner'); 
$this->db->group_by('b.name'); 

從文件here

$ this-> db-> select()接受可選的第二個參數。如果您將 設置爲FALSE,則CodeIgniter將不會嘗試使用反引號來保護您的字段或表 名稱。如果您需要複合選擇 聲明,這很有用。

編輯

就在你的SELECT語句添加FALSE

function get() { 
    $this->db->select("b.name,SUM(CASE WHEN c.size ='S' THEN 1 ELSE 0 END) as S,SUM(CASE WHEN c.size = 'M' THEN 1 ELSE 0 END) as M,SUM(CASE WHEN c.size = 'L' THEN 1 ELSE 0 END) as L,SUM(CASE WHEN c.size = 'XL' THEN 1 ELSE 0 END) as XL",FALSE); 

    $this->db->from('order'); 
    $this->db->join('ukuran','order.id_size=ukuran.id_size'); 
    $this->db->where('date',$date); 
    return $this->db->get(); 
}