Intereting Posts
Уровень изоляции для одного запроса SELECT с помощью PHP mysqli_query Сортировка анкетных данных с использованием PHP и SQL JQuery JSON призывает к PHP WebService всегда запускает обратный вызов «Ошибка» Соединение OCI8 для PHP на IIS7 Windows 2008 Twilio – Как набрать номер третьей стороны и добавить его на конференцию? Карта родословной / древовидной структуры из базы данных Неустранимая ошибка: превышено максимальное превышение Объедините несколько MySQL-запросов в одной таблице в один Symfony2: невозможно смоделировать HTTP-аутентификацию в функциональном тесте Требуется расширение Mcrypt PHP. В Laravel С Ubuntu 14 Как публиковать данные в PHP с помощью file_get_contents? Доктрина / Symfony – Несколько отношений один-ко-многим на одной модели как извлечь текст из элемента html по id и назначить переменной php? Получить баланс счета Paypal Почему это хорошо сохранить для сохранения сеансов в базе данных?

Использование Match and Against в MySQL и CodeIgniter

Я пытаюсь реализовать функцию поиска в моем проекте codeIgniter. У меня есть таблица под названием product_search, где я устанавливаю полнотекстовый индекс, используя следующую команду:

ALTER TABLE `product_search` ADD FULLTEXT (`prod_title`, `prod_desc`) 

Затем я просматриваю его, используя следующий код CodeIgniter:

 $this->db->select("prod_id"); $this->db->where("MATCH (`prod_title`, `prod_desc`) AGAINST ('{$searchStr}')"); $this->db->or_where("prod_id LIKE '%{$searchStr}%'"); $this->db->or_where("prod_sku LIKE '%{$searchStr}%'"); $this->db->or_where("prod_title LIKE '%{$searchStr}%'"); $this->db->or_where("prod_desc LIKE '%{$searchStr}%'"); $query = $this->db->get("product_search"); 

Это, однако, приводит к следующей ошибке:

Номер ошибки: 1064

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «AGAINST (« шелк ») ИЛИ prod_id LIKE«% silk% »ИЛИ prod_sku LIKE«% silk% »ИЛИ« prod »в строке 3

SELECT prod_id FROM ( product_search ) WHERE MATCH ( prod_title , prod_desc ) ПРОТИВ ('silk') ИЛИ prod_id LIKE '% silk%' ИЛИ prod_sku LIKE '% silk%' ИЛИ prod_title LIKE '% silk%' ИЛИ prod_desc LIKE '% silk% '

Имя файла: models / products_model.php

Номер строки: 430

Почему он помещает обратные ссылки вокруг MATCH?

Если я удалю пробел между MATCH и последующими скобками, я получаю следующее сообщение об ошибке:

Номер ошибки: 1191

Невозможно найти индекс FULLTEXT, соответствующий списку столбцов

SELECT prod_id FROM ( product_search ) WHERE MATCH ( prod_title , prod_desc ) ПРОТИВ ('silk') ИЛИ prod_id LIKE '% silk%' ИЛИ prod_sku LIKE '% silk%' ИЛИ prod_title LIKE '% silk%' ИЛИ prod_desc LIKE '% silk% '

Имя файла: models / products_model.php

Номер строки: 430

Однако я использовал верхнюю команду для добавления индекса полного текста. Что происходит не так?

Я решил проблему, добавив IN BOOLEAN MODE в раздел раздела, как показано ниже:

 SELECT `prod_id` FROM (`product_search`) WHERE MATCH (`prod_title`, `prod_desc`) AGAINST ('silk' IN BOOLEAN MODE) OR `prod_id` LIKE '%silk%' OR `prod_sku` LIKE '%silk%' OR `prod_title` LIKE '%silk%' OR `prod_desc` LIKE '%silk%';