如何使用Codeigniter活动记录对“喜欢”进行分组?

时间:2014-09-02 15:50:08

标签: php mysql sql codeigniter

我正在构建一个包含多个选项的搜索表单。我们的想法是寻找具有某些特征的人,如职业生涯,上一份公司工作的名称,多年的经验等等。

在表格的第一部分,您可以输入您希望候选人拥有的职业,第二部分您可以输入一个或多个公司名称。我想要的是我的查询看起来像这样:

SELECT *
FROM work_experience
WHERE position = 'some position'
AND (company LIKE 'company 1' OR company LIKE 'company 2', etc)

问题是我不知道用户可能输入的许多公司名称,我所做的是将每个名字存储在一个我不知道它有多大的数组中。

我尝试使用or_like()活动记录,但问题是它找到了位置x'或者在'公司x'这不是我想要的结果。

有没有办法使用活动记录进行此查询?如果我不知道我正在搜索的公司名称的确切数量,或者如何在简单的SQL中进行查询。

感谢您的时间和帮助,如果不清楚,请告诉我。

2 个答案:

答案 0 :(得分:2)

尝试使用此序列

控制器代码

$getcompanyList=$this->input->post('company'); //post variable company from view
$data['companyList']=explode(',', $getcompanyList);
//Query for model
$getResult=$this->myModel->somefunction($data);

型号代码

function somefunction($data){
$this->db->select('*');
$this->db->where('position','some position');
$this->db->where_in('company',$data['companyList']);
//or $this->db->or_where_in('company',$data['companyList']);
$getResult=$this->db->get('work_experience');
}

现在,如果您没有获得所需的结果,那么只需使用$ this-> db-> last_query()打印最后一个查询,或者对应用程序进行概要分析并检查正在生成的sql。

答案 1 :(得分:1)

应该如何 -


查看:

<form action="/career/search/" method="POST">
      Position: <input type="text" name="position" />
      Company1: <input type="text" name="company[]" />
      Company2: <input type="text" name="company[]" />
      Company3: <input type="text" name="company[]" />
      ...
      ...
      CompanyN: <input type="text" name="company[]" />
</form>


控制器:

class Career extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
    }

    public function search()
    {
       $this->career_model->search_career($this->input->post());
    }
}


(A)模型(使用where_in):

class Career_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }

    public function search_career($data)
    {
        $this->db->select('*');
        $this->db->where('position', $data['position']);
        $this->db->where_in('company', $data['company']);
        $query = $this->db->get('work_experience');

        echo "<pre>"; print_r($query->result());   // Result           
    }
}


(B)模型(使用or_like):

class Career_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }

    public function search_career($data)
    {
        $this->db->select('*');
        $this->db->where('position', $data['position']);

        foreach($data['company'] as $company)
        {
            $this->db->or_like('company', $company);
        }
        $query = $this->db->get('work_experience');

        echo "<pre>"; print_r($query->result());   // Result           
    }
}


修改

foreach($data['company'] as $company)
{
    $wh[] = "`company` LIKE '".$company."'";
}
$where = "(".implode("or", $wh).")";
$this->db->where($where, NULL, FALSE);