我正在构建一个包含多个选项的搜索表单。我们的想法是寻找具有某些特征的人,如职业生涯,上一份公司工作的名称,多年的经验等等。
在表格的第一部分,您可以输入您希望候选人拥有的职业,第二部分您可以输入一个或多个公司名称。我想要的是我的查询看起来像这样:
SELECT *
FROM work_experience
WHERE position = 'some position'
AND (company LIKE 'company 1' OR company LIKE 'company 2', etc)
问题是我不知道用户可能输入的许多公司名称,我所做的是将每个名字存储在一个我不知道它有多大的数组中。
我尝试使用or_like()活动记录,但问题是它找到了位置x'或者在'公司x'这不是我想要的结果。
有没有办法使用活动记录进行此查询?如果我不知道我正在搜索的公司名称的确切数量,或者如何在简单的SQL中进行查询。
感谢您的时间和帮助,如果不清楚,请告诉我。
答案 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);