2017-04-03 12 views
1

私はcodeigniterを使用しています。私はクエリで集計関数を使用する必要があります。だから私はこのクエリを持っています。codeigniterでクエリとして文字列変数を使用

私は、単純なforeachループ私はこのクエリ

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

の結果を取得しようとすると、今ではそれ以外の場合は、私に構文エラーを与えている

$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.= '"'; 

て、このクエリを生成している

"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`" 

このクエリを直接入力したとき

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

正常に動作しています。

+0

あなたは、PHPやMySQLを何構文エラーが出るのですか? – Shadow

+0

SQL構文にエラーがあります。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックして、正しい構文が近くにあることを確認してください。 ''日付が日付、日付、件名が 'Account_ID' = 2、SUM(Total_Bricks)ELSE 0' 'が行末になります –

+0

あなたは、 'あなたの' select'の前に。 – Shadow

答えて

1

あなた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" 
場合 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`" 

場合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"; 

    } 

} 

ようにする必要がありますあなたの'"

  1. ラッピングあまりにも多くのコード
  2. <br />は使用しないで10

    間違っ無関係なタグ


提案

  1. 使用変数($Account_ID)ではなく、実際の配列ポインタ($value['Account_ID'];)の - それは理解しやすいですし、DEBUGに簡単に
+0

あなたのtime.iに感謝します問題は
タグであったと思います。私はそれらを削除して、クエリは素晴らしい:) :)ありがとう –

関連する問題