MySQL CASE WHEN 条件不适用

问题描述 投票:0回答:1

我有以下功能可以在选定的日期范围内显示项目余额

public function issueDetailReport($id,$start,$end){
    $this->db->select('*,     
      (CASE 
      WHEN store_update_stock.order_status = "issue"  THEN store_branch.branch_name     
      ELSE tbl_supplier.supplier_name
      END) supplier_officer_name,

      (CASE 
      WHEN store_update_stock.order_status = "issue" THEN store_update_stock.request_no      
      ELSE store_update_stock.bill_no
      END) number,      

      (CASE store_update_stock.order_status
      WHEN "issue" THEN store_update_stock_details.qty * (-1)   
      ELSE 0
      END) quantity,      

      (CASE store_update_stock.order_status
      WHEN "purchase" THEN store_update_stock_details.qty 
      ELSE store_update_stock_details.qty 
      END) purchase,        

      (CASE store_update_stock.order_status
      WHEN "purchase" THEN store_update_stock_details.qty 
      ELSE 0
      END) p2,      

      (CASE store_update_stock.order_status      
      WHEN "purchase" THEN store_update_stock_details.qty 
      WHEN "issue" THEN store_update_stock_details.qty 
      END) balance    
     ');    

    $this->db->from('store_update_stock');
    $this->db->join('store_update_stock_details','store_update_stock.update_stock_id=store_update_stock_details.update_stock_id', 'inner');     
    $this->db->join('store_branch','store_update_stock.branch_id=store_branch.branch_id', 'left' );     
    $this->db->join('tbl_supplier','store_update_stock.supplier=tbl_supplier.supplier_id', 'left');     
    $this->db->join('store_item','store_update_stock_details.item=store_item.item_id', 'left');
    $this->db->where("store_update_stock.status='1' and store_item.item_id=$id");
    $this->db->where("store_update_stock_details.qty <> 0");
    if($start!=NULL && $end!=NULL)
        $this->db->where("store_update_stock.billed_date BETWEEN '$start' AND '$end'");     
    $this->db->order_by('store_update_stock.billed_date','ASC');
    $q=$this->db->get();
    if($q->num_rows()>0){
        return $q->result();
    }
    return false;
}   

没关系。该功能正在运行。但我想通过以下视图使用“$start”在任何选定日期获取“p2”下的余额。

相关代码在这里:

(CASE store_update_stock.order_status
      WHEN "purchase" THEN store_update_stock_details.qty 
      ELSE 0
      END) p2,

通过运行此代码,p2 下有“0”出局。然后,我将代码更改如下:

 (CASE store_update_stock.order_status
          WHEN "purchase" AND store_update_stock.billed_date '<= $start' THEN store_update_stock_details.qty 
          ELSE 0
          END) p2,

但是代码输出语法错误

您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在“”附近使用的正确语法<= $start" THEN store_update_stock_details.qty ' at line 14

可能出了什么问题?有人可以帮忙吗?

codeigniter mariadb
1个回答
0
投票

你的报价放错地方了

WHEN "purchase" AND store_update_stock.billed_date <= '$start'
© www.soinside.com 2019 - 2024. All rights reserved.