【问题标题】:Use where clause with Like in codeigniter在 codeigniter 中使用带 Like 的 where 子句
【发布时间】:2013-06-27 10:29:39
【问题描述】:

我正在做一个项目。我正在我的系统中实现搜索功能。

我必须根据当前使用登录显示两个表中的搜索记录。我尝试了以下代码:

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

我想根据当前存储在 $recruiter 中的当前用户 ID 显示搜索结果。

提前致谢。

【问题讨论】:

  • 当您尝试代码时,出现了什么问题?
  • 它根据我在查询中传递的关键字返回记录(根据关键字返回所有其他用户记录,而不是基于招聘者 ID)。它必须显示与特定用户相关的搜索结果。

标签: php mysql codeigniter


【解决方案1】:

您必须将所有 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 中,那么您必须将 OR 条件与父 AND 操作分组,如

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

希望有意义

【讨论】:

    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2019-06-02
      • 2012-06-10
      相关资源
      最近更新 更多