繁体   English   中英

使用oci8数据库驱动程序在Codeigniter中组合oracle sql和OR查询

[英]combining oracle sql AND OR queries in Codeigniter using oci8 database drivers

我正在使用codeigniter OCI8数据库驱动程序可以任何人帮我如何使用$this->db->group_start()

如果这在oci8中不起作用,那么我使用基于ajax的数据表的任何备用选项。

在页面加载数据表工作,但在搜索数据表的情况下返回此错误

致命错误 :调用未定义的方法CI_DB_oci8_driver :: group_start()

这是我的代码

function _get_datatables_query(){
    $this->db->from($this->table);

    $i = 0;

    foreach($this->column_search as $item){
        if(strtoupper($_POST['search']['value'])) // if datatable send POST for search
        {
            if($i===0) // first loop
            {
                $this->db->group_start();
                $this->db->like($item, strtoupper($_POST['search']['value']));
            }
            else
            {
                $this->school_db->or_like($item, strtoupper($_POST['search']['value']));
            }
            $this->db->group_end();
          //  if(count($this->column_search) - 1 == $i) //last loop
             //   $this->db->group_end(); //close bracket
        }
        $i++;
    }

    if(isset($_POST['order'])) // here order processing
    {
        $this->db->order_by($this->column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
    }
    else if(isset($this->order))
    {
        $order = $this->order;
        $this->db->order_by(key($order), $order[key($order)]);
    }
}

我不知道会抛出哪个错误 - 但是你的功能不会那样 - 请尝试以下方法

function _get_datatables_query()
{
    $this->db->from($this->table);

    $this->db->group_start();
    foreach($this->column_search as $item)
    {
        if(strtoupper($_POST['search']['value'])) // if datatable send POST for search
        {
            $this->db->or_like($item, strtoupper($_POST['search']['value']));
        }
    }
    $this->db->group_end();

    if(isset($_POST['order'])) // here order processing
    {
        $this->db->order_by($this->column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
    }
    else if(isset($this->order))
    {
        $order = $this->order;
        $this->db->order_by(key($order), $order[key($order)]);
    }
}

我用一些自定义编码解决了这个问题。 我只是把Like in Where子句

$ this-> db-> where(“(”。$ item。“LIKE'%”。strtoupper($ _ POST ['search'] ['value']。“%'”));

这是适合我的解决方案

private function _get_datatables_query()
{

    $this->db->from($this->table);

    $i = 0;
    foreach ($this->column_search as $item)
    {
        if(strtoupper($_POST['search']['value'])) // if datatable send POST for search
        {
            if($i===0) // first loop
            {
                if(count($this->column_search) > 1)
                    $this->db->where("(" .$item . " LIKE '%".strtoupper($_POST['search']['value']."%'"));
                else
                    $this->db->where("(" .$item . " LIKE '%".strtoupper($_POST['search']['value']."%')"));
            }
            else
            {
                if(count($this->column_search) - 1 == $i)
                    $this->db->or_where($item . " LIKE '%".strtoupper($_POST['search']['value']."%')"));
                else
                    $this->db->or_where($item . " LIKE '%".strtoupper($_POST['search']['value']."%'"));
            }
        }
        $i++;
    }

    if(isset($_POST['order'])) // here order processing
    {
        $this->db->order_by($this->column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
    }
    else if(isset($this->order))
    {
        $order = $this->order;

        $this->db->order_by(key($order), $order[key($order)]);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM