我正在尝试在我的网站上添加搜索功能,用户可以使用部门名称搜索工作,因此例如,他们可能想要搜索
IT、媒体、互联网、营销
我想使用这个搜索词并返回与该搜索词匹配的所有工作,但是一个工作可能有多个部门,但我只希望该工作返回一次。
以下是我当前的代码,它不起作用,
public function getJobsBySector($criteria)
{
$criteria = explode("," $criteria);
$this->db->select('job_id, job_title, salary, retrain, bonuses_available, bonus_description, job_summary, job_description, company_name, company_summary, logo_small, logo_large, employers.employer_id')
->from('jobs')
->join('employers', 'employers.employer_id = jobs.employer_id', 'left')
// ->join('applications', 'applications.jobs_job_id = jobs.job_id', 'left')
$i = 0;
foreach($criteria as $cri) {
$this->db->like('sector', $cri[$i])
$i++;
}
$query = $this->db->get();
return $query->result_array();
}
MySQL SELECT可以有DISTINCT
修饰符,这将使它只返回一次任何匹配的行。Codeigniter有一种特殊的方法可以将DISTINCT
添加到查询中。
...
$this->db->select('job_id, job_title, salary, retrain, bonuses_available, bonus_description, job_summary, job_description, company_name, company_summary, logo_small, logo_large, employers.employer_id')
->disctinct()
->from('jobs')
...
首先,这是错误的foreach用法:
foreach($criteria as $cri) {
$this->db->like('sector', $cri[$i])
$i++;
}
应该是:
foreach($criteria as $cri) {
$this->db->like('sector', $cri)
}
但这将产生一个带有…的查询。。。喜欢和喜欢其他东西,这不是你想要的,所以正确的版本应该是这样的:
foreach($criteria as $cri) {
$this->db->or_like('sector', $cri)
}
只要扇区字段是字符串,就不用担心只返回一次工作,考虑到您的代码,这里的情况似乎就是这样。