1

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%')

3 Answers 3

2

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%')");
Sign up to request clarification or add additional context in comments.

5 Comments

i'm using CI 2.1 and it show error Call to undefined method CI_DB_mysql_driver::group_start()
@chotesah this function only for CI 3 not for CI 2.
then what is the solution? @Saty
Thanks @Saty for quick reply as answer and comments.
Hi @clsah if this or any answer has solved your question please consider accepting it by clicking the check-mark. This indicates to the wider community that you've found a solution and gives some reputation to both the answerer and yourself. There is no obligation to do this.
1

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%')";
        }

Comments

0

Try like this

$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%')");

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.