Столкнувшись с проблемой при поиске по нескольким словам - PullRequest
2 голосов
/ 19 апреля 2019

Я создаю поиск CodeIgniter для своего проекта книжного магазина. Это нормально при поиске по одному слову, но я сталкиваюсь с проблемой при поиске по нескольким словам. Как я могу решить эту проблему.

МОЙ контроллер

public function search()
{
    /*=== LOAD DYNAMIC CATAGORY ===*/
    $this->load->model('admin_model');
    $view['category'] = $this->admin_model->get_category();
    /*==============================*/


    $this->form_validation->set_rules('search_book', "Search",'required');

    if($this->form_validation->run() == FALSE)
    {
        #...Redirected same page after action
        redirect($_SERVER['HTTP_REFERER']);
    }
    else
    {
        $query = $this->input->post('search_book');

        $this->load->model('user_model');
        $view['books'] = $this->user_model->search($query);


        $view['user_view'] = "users/search_books";
        $this->load->view('layouts/user_layout', $view);
    }

}

МОЯ модель

public function search($query)
{
    $this->db->order_by('id', 'DESC');
    $this->db->from('books');
    $this->db->like('book_name', $query);
    $this->db->where('status', 1);
    $q = $this->db->get();
    return $q->result();
}

Например, если я напишу PHP в поле поиска, оно принесет все мои книги, в названии которых есть слово PHP. Это нормально для меня.

но когда я пишу PHP BOOKS в поле поиска, это показывает, что книга не найдена.

Я хочу показать результат, если найдено какое-либо слово.

1 Ответ

1 голос
/ 19 апреля 2019

Вы можете заменить это

$this->db->like('book_name', $query);

с условием

$str = str_replace(" ","|", $query);
$this->db->where("book_name rlike '$str'");

Подробнее о rlike можно узнать здесь .

Вот лучший полнотекстовый поиск справка для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...