我正在尝试将搜索功能添加到我的网站上,用户可以使用扇区名称搜索作业,例如他们可能想要搜索
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();
}
答案 0 :(得分:1)
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')
...
答案 1 :(得分:0)
首先,这是错误的foreach使用:
foreach($criteria as $cri) {
$this->db->like('sector', $cri[$i])
$i++;
}
它应该是:
foreach($criteria as $cri) {
$this->db->like('sector', $cri)
}
但是这会产生一个查询... LIKE某事 AND LIKE something_else,这不是你想要的,所以正确的版本应该是这样的:
foreach($criteria as $cri) {
$this->db->or_like('sector', $cri)
}
只要扇区字段为字符串,就不用担心只返回一次工作,考虑到你的代码,这似乎就是这种情况。