2017-04-03 96 views
1

我使用codeigniter,我需要在查询中使用聚合函数。所以我有这个查询。在codeigniter中使用字符串变量作为查询

"SELECT Dated, CASE WHEN `Account_ID` = 2 then SUM(Total_Bricks) ELSE 0 end as 'Nadeem', 
CASE WHEN Account_ID = 2 then SUM(Kaat_Bricks) ELSE 0 end as 'NadeemKaat', 
CASE WHEN `Account_ID` = 7 then SUM(Total_Bricks) ELSE 0 end as 'Abid', 
CASE WHEN Account_ID = 7 then SUM(Kaat_Bricks) ELSE 0 end as 'AbidKaat', 
CASE WHEN `Account_ID` = 8 then SUM(Total_Bricks) ELSE 0 end as 'Sajid', 
CASE WHEN Account_ID = 8 then SUM(Kaat_Bricks) ELSE 0 end as 'SajidKaat' 
FROM `tblstockdetail` GROUP BY `Dated`" 

我已经通过一个简单的foreach循环产生这个查询

$stock = $this->Kharkaar_Model->get_stockdetail(); 

     $sql = '"SELECT Dated, '; 

     $numItems = count($stock); 
     $i = 0; 
     foreach ($stock as $key => $value) 
     { 

      if(++$i === $numItems) 
      { 
       $sql.= "CASE WHEN `Account_ID` = ".$value['Account_ID']." then SUM(Total_Bricks) ELSE 0 end as '".$value['AccountName']."', <br /> 
      CASE WHEN Account_ID = ".$value['Account_ID']." then SUM(Kaat_Bricks) ELSE 0 end as '".$value['AccountName']."Kaat' <br /> FROM `tblstockdetail` GROUP BY `Dated`"; 
      } 
      else 
      { 
       $sql.= "CASE WHEN `Account_ID` = ".$value['Account_ID']." then SUM(Total_Bricks) ELSE 0 end as '".$value['AccountName']."', <br /> 
      CASE WHEN Account_ID = ".$value['Account_ID']." then SUM(Kaat_Bricks) ELSE 0 end as '".$value['AccountName']."Kaat', <br /> "; 

      } 

     } 

     $sql.= '"'; 

现在,当我试图让这个查询的结果

$result = $this->db->query($sql); 

它给我一个语法错误,否则当我把这个查询直接进入

$result = $this->db->query(// string query here); 

它运行良好。

+0

你什么语法错误,PHP或MySQL? – Shadow

+0

您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册,以找到在''SELECT date,CASE WHERE'Account_ID' = 2时使用的正确语法,然后SUM(Total_Bricks)ELSE 0在第1行以''结尾 –

+0

您有一个额外的'' '在'select'前面。 – Shadow

回答

1

foreach应该是这样的

$stock = $this->Kharkaar_Model->get_stockdetail(); 

$sql = "SELECT Dated, "; 

$numItems = count($stock); 
$i = 0; 
foreach ($stock as $key => $value) 
{ 

    if(++$i === $numItems) 
    { 
     $Account_ID = $value['Account_ID']; 
     $AccountName = $value['AccountName']; 

     $sql.= "CASE WHEN `Account_ID` = $Account_ID then SUM(Total_Bricks) ELSE 0 end as $AccountName, 
     CASE WHEN Account_ID = $Account_ID then SUM(Kaat_Bricks) ELSE 0 end as $AccountName 
     FROM `tblstockdetail` GROUP BY `Dated`"; 
    } 
    else 
    { 
     $sql.= "CASE WHEN `Account_ID` = $Account_ID then SUM(Total_Bricks) ELSE 0 end as $AccountName, 
     CASE WHEN Account_ID = $Account_ID then SUM(Kaat_Bricks) ELSE 0 end as $AccountName"; 

    } 

} 

如果TRUE

"SELECT Dated, 
CASE WHEN `Account_ID` = $Account_ID then SUM(Total_Bricks) ELSE 0 end as $AccountName, 
CASE WHEN Account_ID = $Account_ID then SUM(Kaat_Bricks) ELSE 0 end as $AccountName 
FROM `tblstockdetail` GROUP BY `Dated`" 

如果FALSE

"SELECT Dated, 
CASE WHEN `Account_ID` = $Account_ID then SUM(Total_Bricks) ELSE 0 end as $AccountName, 
ASE WHEN Account_ID = $Account_ID then SUM(Kaat_Bricks) ELSE 0 end as $AccountName" 

错在你的代码

  1. 包装太多与'"
  2. <br />不使用无关的标签

建议

  1. 使用变量($Account_ID),而不是实际的数组指针($value['Account_ID'];) - 这很容易理解,便于调试
+0

谢谢你的time.i认为问题是与
标签我刚刚删除这些和查询工作很好:)谢谢 –

相关问题