Codeigniter活动记录帮助

时间:2011-06-07 12:08:40

标签: php mysql database codeigniter activerecord

我正在尝试将搜索功能添加到我的网站上,用户可以使用扇区名称搜索作业,例如他们可能想要搜索

  

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();
}

2 个答案:

答案 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)
}

只要扇区字段为字符串,就不用担心只返回一次工作,考虑到你的代码,这似乎就是这种情况。