【问题标题】:Codeigniter-Problem while using yearweek('datefield') in where class在 where 类中使用 yearweek('datefield') 时出现 Codeigniter 问题
【发布时间】:2018-12-24 06:38:56
【问题描述】:

今天我在尝试使用带有yearweek() 的日期字段进行过滤时遇到了 CodeIgniter 框架中的问题。这是我的正常查询,没有 CodeIgniter 样式定义

SELECT b.name as branch,str_to_date(concat(yearweek(gp.createddate), 'sunday'), '%X%V %W') as week,sum(case when amount>0 then qty else 0 end) as purchase_quantity,sum(case when amount>0 then gp.amount else 0 end) as purchase_amount,sum(case when amount<0 then qty else 0 end) as return_quantity,sum(case when amount<0 then gp.amount else 0 end) as return_amount FROM `group_purchase` gp LEFT JOIN `branch` b ON gp.branchid=b.id WHERE yearweek(gp.createddate)=yearweek('2018-12-24')  GROUP BY gp.branchid,yearweek(gp.createddate) ORDER BY yearweek(gp.createddate) DESC

效果很好,结果也很准确。我使用yearweek() 在一周内对数据进行分组。当我在codeigniter 中实现这个查询时,除了yearweek()之外,所有的东西都运行良好。我附上了我的codeigniter 模型对于下面的上述查询

function getPurchasereport($limit,$offset,$order_column,$order_type,$parameters)
{

    $this->db->select("b.name as branchname,str_to_date(concat(yearweek(gp.createddate), 'sunday'), '%X%V %W') as week,sum(case when amount>0 then qty else 0 end) as purchase_quantity,sum(case when amount>0 then gp.amount else 0 end) as purchase_amount,sum(case when amount<0 then qty else 0 end) as return_quantity,sum(case when amount<0 then gp.amount else 0 end) as return_amount");
     if($parameters['branch']!=NULL){
       $this->db->like('gp.branchid',$parameters['branch']);
    }
    if($parameters['cdatefrom']!=NULL){
       $this->db->where('yearweek(gp.createddate)',yearweek("$parameters['cdatefrom'])");
    }
    $this->db->group_by(array("gp.branchid", "yearweek(gp.createddate)"));
    if(empty($order_column) || empty($order_type)){
        $this->db->order_by('yearweek(gp.createddate)','asc');
    }else{
        $this->db->order_by($order_column,$order_type);
    }
    if($limit!=0){
        $this->db->limit($limit,$offset);
    }
    $this->db->join('branch b','gp.branchid=b.id ','left');
    $query = $this->db->get('group_purchase gp');
    if($query->num_rows()>0){
        return $query->result_array();
    }else{
        return FALSE;
    }
}

它产生了如下错误 error

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    你的错误是因为这一行

    if($parameters['cdatefrom']!=NULL){
           $this->db->where('yearweek(gp.createddate)',yearweek("$parameters['cdatefrom'])");
        }
    

    函数yearweek 不是有效的PHP 函数,因此您不能那样使用它。 您需要将其替换为以下内容:

    if($parameters['cdatefrom']!=NULL){
           $this->db->where('yearweek(gp.createddate)',date('YW',strtotime($parameters['cdatefrom'])));
        }
    

    【讨论】:

    • 它没有过滤任何东西,也没有显示任何错误
    • 它不返回任何结果然后也不显示任何错误
    • 如果没有显示任何错误,则表示已修复,现在对于没有返回任何结果,您可以检查函数的输出,或者打印查询并检查它,然后发布什么它说我可以帮忙。
    • 谢谢,它工作正常,现在编码中的一个小错误已被清除。
    • 很高兴为您解决了问题,如果有任何问题,请尽管询问,我会尽力提供帮助
    猜你喜欢
    • 2016-11-21
    • 2011-07-22
    • 2017-05-21
    • 1970-01-01
    • 2021-10-09
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    相关资源
    最近更新 更多