I want to multiple like condition in bracket. Here is my CI Active Record
code:-
$this->db->select("ev.`created_date`,u.first_name,u.last_name,ev.`expert_id` , ev.`posted_by` ,
ev.`segment_id` , ev.`expert_title` , ev.`expert_discription` , ev.`status` , s.segment", FALSE);
$this->db->from($this->db->dbprefix . 'expert_view as ev');
$this->db->join($this->db->dbprefix . 'segment as s', 's.segment_id=ev.segment_id');
$this->db->join($this->db->dbprefix . 'users as u', 'u.id=ev.posted_by');
if ($this->session->userdata('group_id') != 1) {
$this->db->where('ev.posted_by', $this->session->userdata('userid'));
}
if ($sSearch) {
$this->db->like('u.first_name', $sSearch);
$this->db->or_like('u.last_name', $sSearch);
$this->db->or_like('ev.created_date', $sSearch);
$this->db->or_like('ev.posted_by', $sSearch);
$this->db->or_like('ev.`expert_title`', $sSearch);
$this->db->or_like('s.`segment`', $sSearch);
}
echo $this->db->last_query();
Output come from above code:
SELECT ev.`created_date`, u.first_name, u.last_name, ev.`expert_id`, ev.`posted_by`, ev.`segment_id`
, ev.`expert_title`, ev.`expert_discription`, ev.`status`, s.segment
FROM (`adv_expert_view` as ev)
JOIN `adv_segment` as s ON `s`.`segment_id`=`ev`.`segment_id`
JOIN `adv_users` as u ON `u`.`id`=`ev`.`posted_by`
WHERE `ev`.`posted_by` = '14'
AND `u`.`first_name` LIKE '%a%'
OR `u`.`last_name` LIKE '%a%'
OR `ev`.`created_date` LIKE '%a%'
OR `ev`.`expert_title` LIKE '%a%'
OR `s`.`segment` LIKE '%a%'
Expected query:
SELECT ev.`created_date`, u.first_name, u.last_name, ev.`expert_id`, ev.`posted_by`, ev.`segment_id`
, ev.`expert_title`, ev.`expert_discription`, ev.`status`, s.segment
FROM (`adv_expert_view` as ev)
JOIN `adv_segment` as s ON `s`.`segment_id`=`ev`.`segment_id`
JOIN `adv_users` as u ON `u`.`id`=`ev`.`posted_by`
WHERE `ev`.`posted_by` = '14'
AND (`u`.`first_name` LIKE '%a%'
OR `u`.`last_name` LIKE '%a%'
OR `ev`.`created_date` LIKE '%a%'
OR `ev`.`expert_title` LIKE '%a%'
OR `s`.`segment` LIKE '%a%')
IF you are using CI 3 You can use ->group_start()
and ->group_end()
for adding bracket. For more detail read Query grouping
$this->db->group_start()
$this->db->like('u.first_name', $sSearch);
$this->db->or_like('u.last_name', $sSearch);
$this->db->or_like('ev.created_date', $sSearch);
$this->db->or_like('ev.posted_by', $sSearch);
$this->db->or_like('ev.`expert_title`', $sSearch);
$this->db->or_like('s.`segment`', $sSearch);
$this->db->group_end()
FOR CI 2 You can create your condition as
$this->db->where("(`u`.`first_name` LIKE '%a%' OR `u`.`last_name` LIKE '%a%' OR `ev`.`created_date` LIKE '%a%' OR `ev`.`expert_title` LIKE '%a%' OR `s`.`segment` LIKE '%a%')");
Do like this:-
$query = "SELECT ev.`created_date`, u.first_name, u.last_name, ev.`expert_id`, ev.`posted_by`, ev.`segment_id`
, ev.`expert_title`, ev.`expert_discription`, ev.`status`, s.segment
FROM (`adv_expert_view` as ev)
JOIN `adv_segment` as s ON `s`.`segment_id`=`ev`.`segment_id`
JOIN `adv_users` as u ON `u`.`id`=`ev`.`posted_by`";
$query.= " WHERE";
if ($this->session->userdata('group_id') != 1) {
$query.= " `ev`.`posted_by` =" . $this->session->userdata('userid') . " AND";
}
if ($sSearch) {
$query.= " (`u`.`first_name` LIKE '%$sSearch%'
OR `u`.`last_name` LIKE '%$sSearch%'
OR `ev`.`created_date` LIKE '%$sSearch%'
OR `ev`.`expert_title` LIKE '%$sSearch%'
OR `s`.`segment` LIKE '%$sSearch%')";
}
试试这样吧
$this->db->where("(`u`.`first_name`LIKE '%a%'OR `u`.`last_name` LIKE '%a%' OR `ev`.`created_date` LIKE '%a%' OR `ev`.`expert_title` LIKE '%a%' OR `s`.`segment` LIKE '%a%')");
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.