簡體   English   中英

如何將Codeigniter活動記錄中的“喜歡”分組?

[英]How to group 'like' with Codeigniter active records?

我正在建立一個具有多個選項的搜索表單。 這樣做的目的是尋找具有某些特征的人,例如職業,上一份公司的工作名稱,工作經驗等。

在表格的第一部分中,您可以輸入您希望應聘者擁有的職業,在第二部分中,您可以輸入一個或多個公司名稱。 我想要的是查詢看起來像這樣:

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

問題是我不知道用戶可能會輸入很多公司名稱,我要做的是將每個名稱存儲在一個數組中,但我不知道它的大小。

我嘗試使用or_like()活動記錄,但問題是它正在尋找具有“ positionx”的人或在“ company x”工作的人,這不是我想要的結果。

有沒有辦法使用活動記錄進行此查詢? 或者,如果我不知道要搜索的公司名稱的確切數量,怎么用簡單的SQL進行查詢。

感謝您的時間和幫助,如果不清楚,請告訴我。

嘗試使用此順序

控制器代碼

$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。

這應該是這樣-


視圖:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM