2015-01-13 2 views
0

Я хочу реализовать поиск, как в корзине. У меня есть несколько таблиц. Я использую функцию модели приведенной нижеВнедрение глобального поиска в php

function xenSelectCarsGlobal($key=null) 
    { 
     $this->db->select('*'); 
     $this->db->from('sel_car_details'); 
     $this->db->join('derivative', 'derivative.der_id = sel_car_details.der_id', 'left'); 
     $this->db->join('variant', 'variant.var_id = sel_car_details.var_id', 'left'); 
     $this->db->join('model', 'model.model_id = sel_car_details.mod_id', 'left'); 
     $this->db->join('make', 'make.make_id = sel_car_details.mk_id', 'left'); 
     $this->db->join('car_color', 'car_color.color_id = sel_car_details.color_id', 'left'); 
     $this->db->join('body_type', 'body_type.body_id = sel_car_details.body_type_id', 'left'); 
     $this->db->join('fuel_type', 'fuel_type.fuel_id = sel_car_details.fuel_type_id', 'left'); 
     $this->db->join('gallery', 'gallery.sel_carid = sel_car_details.sel_car_id', 'left'); 
     $this->db->where('sel_car_details.status', '5'); 
     if(!empty($key)) 
      $this->db->or_like('fuel_type.fuel_name', $key); 
     if(!empty($key)) 
      $this->db->or_like('sel_car_details.engine_size', $key); 
     if(!empty($key)) 
      $this->db->or_like('sel_car_details.mileage', $key); 
     if(!empty($key)) 
      $this->db->or_like('derivative.der_name', $key); 
     if(!empty($key)) 
      $this->db->or_like('variant.variant', $key); 
     if(!empty($key)) 
      $this->db->or_like('model.model', $key); 
     if(!empty($key)) 
      $this->db->or_like('make.maker', $key); 
     if(!empty($key)) 
      $this->db->or_like('car_color.col_name', $key); 
     if(!empty($key)) 
      $this->db->or_like('body_type.body_name', $key); 

     $qry = $this->db->get(); 

     if ($qry->num_rows() != 0) { 
      return $qry->result_array(); 
     } else { 
      return false; 
     }return 1; 
    } 

Это работает properly.But проблема является предположим, что имя тело ххх, цвет желтый, то я искать ххх это показать результат и я искать ххх это показать результат. Но я нахожу xxx желтый в окне поиска, он ничего не показывает. Я хочу перечислить оба результата. Пожалуйста, дайте мне решение ...

+0

'$ this-> db-> где ('sel_car_details.status', '5');' бесполезно здесь –

ответ

1

Вам нужно разделить ваш запрос. Попробуйте это:

function xenSelectCarsGlobal($strQuery=null) 
    { 
     $arrKeywords = ($strQuery !== null) ? explode(' ', $strQuery) : array(); 

     $this->db->select('*'); 
     $this->db->from('sel_car_details'); 
     $this->db->join('derivative', 'derivative.der_id = sel_car_details.der_id', 'left'); 
     $this->db->join('variant', 'variant.var_id = sel_car_details.var_id', 'left'); 
     $this->db->join('model', 'model.model_id = sel_car_details.mod_id', 'left'); 
     $this->db->join('make', 'make.make_id = sel_car_details.mk_id', 'left'); 
     $this->db->join('car_color', 'car_color.color_id = sel_car_details.color_id', 'left'); 
     $this->db->join('body_type', 'body_type.body_id = sel_car_details.body_type_id', 'left'); 
     $this->db->join('fuel_type', 'fuel_type.fuel_id = sel_car_details.fuel_type_id', 'left'); 
     $this->db->join('gallery', 'gallery.sel_carid = sel_car_details.sel_car_id', 'left'); 
     $this->db->where('sel_car_details.status', '5'); 
     if(!empty($arrKeywords)) { 
      foreach($arrKeywords as $strKeyword) { 
       $this->db->or_like('fuel_type.fuel_name', $strKeyword); 
       $this->db->or_like('sel_car_details.engine_size', $strKeyword); 
       $this->db->or_like('sel_car_details.mileage', $strKeyword); 
       $this->db->or_like('derivative.der_name', $strKeyword); 
       $this->db->or_like('variant.variant', $strKeyword); 
       $this->db->or_like('model.model', $strKeyword); 
       $this->db->or_like('make.maker', $strKeyword); 
       $this->db->or_like('car_color.col_name', $strKeyword); 
       $this->db->or_like('body_type.body_name', $strKeyword); 
      } 
     } 

     $qry = $this->db->get(); 

     if ($qry->num_rows() != 0) { 
      return $qry->result_array(); 
     } else { 
      return false; 
     } 
    } 
+0

я думаю, что его working.Any сомнение контакт у –

+0

Это решение будет также получить те результаты, которые 'sel_car_details.status' не равны 5. –

+0

Я не знаю этого DB-framework, но проблема, похоже, связана с условием * * или *. Таким образом, SQL-оператор похож на 'SELECT .... WHERE sel_car_details.status LIKE 5 ИЛИ fuel_type.fuel_name LIKE 'keyword' OR ...' Вам нужно что-то вроде 'SELECT .... WHERE sel_car_details. status LIKE 5 AND (fuel_type.fuel_name LIKE 'keyword' ИЛИ ​​sel_car_details.engine_size LIKE 'keyword' OR ...) ' – Inceddy

Смежные вопросы