2015-09-16 3 views
1

Я хочу, чтобы несколько условий было в скобке. Вот мой CI Active Record код: -Невозможно получить правильную строку в codeigniter с помощью нескольких соединений

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

Выход пришел из выше кода:

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

Ожидаемый запрос:

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

ответ

0

Попробуйте, как это

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

ЕСЛИ вы используете CI 3 Вы можете использовать ->group_start() и ->group_end() для добавления скобки. Более подробно прочитать 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() 

ДЛЯ CI 2 Вы можете создать свое состояние, как

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

Я использую CI 2.1 и показать ошибку ' Вызов неопределенного метода CI_DB_mysql_driver :: group_start() ' – vineet

+0

@chotesah эта функция только для CI 3 не для CI 2. – Saty

+0

то каково решение? @Saty – vineet

1

Делай так: -

$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%')"; 
     } 
Смежные вопросы