我正在开展一个项目。我正在我的系统中实现搜索功能。
我必须根据当前的使用登录信息显示来自两个表的搜索记录。我尝试了以下代码:
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显示搜索结果,该用户ID目前存储在$ recruiter中。
提前致谢。
答案 0 :(得分:0)
您必须在like
中对所有()
条件进行分组,然后为所有相似条件添加AND,请参阅下文
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 :(得分:-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();
}