2013-06-29 32 views
3

我正在開發一個項目。我在我的系統中實現了搜索功能。在codeigniter中使用where子句

我將不得不根據當前使用登錄來顯示來自兩個表的搜索記錄。我曾嘗試下面的代碼:

function searchActivity($limit,$offset,$keyword1,$keyword2,$recruiter_id) 
    { 
     $q=$this->db->select('*')->from('tbl_activity')->limit($limit,$offset);  
     $this->db->join('tbl_job', 'tbl_job.job_id = tbl_activity.job_id_fk', 'left outer'); 
     $this->db->order_by("activity_id", "ASC");   
     $this->db->like('job_title',$keyword1,'both'); 
     $this->db->or_like('job_title',$keyword2,'both');  
     $this->db->or_like('activity_subject',$keyword1,'both'); 
     $this->db->or_like('activity_subject',$keyword2,'both');   
     $this->db->or_like('activity_details',$keyword1,'both'); 
     $this->db->or_like('activity_details',$keyword2,'both');   
     $this->db->where('tbl_activity.recruiter_id_fk',$recruiter_id);    
     $ret['rows']=$q->get()->result(); 
return $ret; 
} 

我要根據當前用戶的ID,這是目前存儲在$招聘顯示搜索結果。

在此先感謝。

+0

當你嘗試了代碼,是什麼問題? –

+0

它正在返回基於我傳遞的查詢中的關鍵字的記錄(根據關鍵字返回所有其他用戶記錄,而不是基於recruiter_id)。它必須顯示與特定用戶相關的搜索結果。 – user2524013

回答

0

你必須將你的信息在(),然後將所有like添加條件,爲所有像條件見下文

function searchActivity($limit,$offset,$keyword1,$keyword2,$recruiter_id) 
{  

    $query="SELECT * FROM tbl_activity 
    left outer tbl_job ON (tbl_job.job_id = tbl_activity.job_id_fk) 
    WHERE tbl_activity.recruiter_id_fk=".$recruiter_id." AND 
    (job_title LIKE '%".$keyword1."%' OR job_title LIKE '%".$keyword2."%' OR 
    activity_subject LIKE '%".$keyword1."%' OR activity_subject LIKE '%".$keyword2."%' OR 
    activity_details LIKE '%".$keyword1."%' OR activity_detailsLIKE '%".$keyword2."%' 
    ) 
    ORDER BY activity_id ASC LIMIT $limit,$offset"; 
    $ret['rows']= $this->db->query($query)->result(); 

return $ret; 
} 

WHERE條件影響的recruiter_id_fk但你有like條件與像SELECT * FROM table WHERE id=1 OR keyword LIKE '%test%' OR keyword1 LIKE '%test%'水平它會給出與id匹配的結果以及與關鍵字匹配的結果,如果你想要結果與關鍵字匹配但是在相同的id中,那麼你必須將OR條件與父母AND的操作分組,如

SELECT * FROM table WHERE id=1 AND (keyword LIKE '%test%' OR keyword1 LIKE '%test%')

希望這是有道理的

-1

試試這個:

function select_where_in($field,$value,$table) 
    { 
     $this->db->select("*"); 
     $this->db->where_in($field, $value); 
     $get_data=$this->db->get($table); 
     return $get_data->result(); 
    } 
+0

解釋你的代碼並使用代碼標籤。 – gsamaras