Как сделать Codeigniter Split Search - PullRequest
       3

Как сделать Codeigniter Split Search

0 голосов
/ 11 октября 2019

Я хочу, чтобы поиск по codeigniter совпадал с любым одним словом в столбце.

Пример: скажем, поисковый запрос "Fashion Outlet for Mens", теперь в столбце таблицы заголовок только "Fashion Outlet", поэтому яхотите, чтобы входные данные поиска были разбиты по словам и столбцу совпадений.

Любая помощь Пожалуйста

public function search($query) 
  {
    $q = $this->db->from('tablename')
    ->like('title',$query)
    ->get();
    return $q->result();
  }

Обновленный вопрос

public function search_query($query,$limit,$offset) 
{
    $keywords = explode(' ', $query);

    foreach ($keywords as $keyword)
    {
    $keyword = trim($keyword);
    $this->db->or_where("`title` LIKE '%$keyword%'");
    $this->db->join('table2', 'tablename.id = table2.id');
    $this->db->limit( $limit , $offset );
    $this->db->order_by('updated_on','desc');
}
$this->db->get('tablename');
return  $this->db->result();
}

Ошибка Got

Not unique table/alias: 'table2'

    SELECT * FROM `tablename` JOIN `table2` ON `tablename`.`id` = `table2`.`id` JOIN `table2` ON `tablename`.`id` = `table2`.`id` WHERE `title` LIKE '%fashion%' OR `title` LIKE '%outlet%' ORDER BY `updated_on` DESC, `updated_on` DESC LIMIT 50

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Найдите обновленный ответ для заказа по приоритету ключевых слов.

$keywords = explode(' ', $query);
 $this->db->select('*');
 $this->db->from('tablename');
 $this->db->join('table2', 'tablename.id = table2.id','left');
 $orderbyQry = "CASE "; 
 foreach ($keywords as $key => $keyword)
 {
    $orderbyQry.="WHEN tablename.title LIKE '%$keyword%' THEN $key ";
    $keyword = trim($keyword);
    $this->db->or_where("tablename.title LIKE '%$keyword%'"); 
 }
 $orderbyQry.=" ELSE 100 END ";
 $this->db->limit( $limit , $offset );
 $this->db->order_by($orderbyQry,'asc');
 $this->db->get();
 return  $this->db->result();
0 голосов
/ 11 октября 2019

Пожалуйста, присоединяйтесь к таблице только один раз и исключите из цикла предложения limit и order_by.

public function search_query($query, $limit, $offset) {
 $keywords = explode(' ', $query);
 $this->db->select('*');
 $this->db->join('table2', 'tablename.id = table2.id');
 foreach ($keywords as $keyword)
 {
    $keyword = trim($keyword);
    $this->db->or_where("`title` LIKE '%$keyword%'"); 
 }
 $this->db->limit( $limit , $offset );
 $this->db->order_by('updated_on','desc');
 $this->db->get('tablename');
 return  $this->db->result();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...