Я пытаюсь реализовать функцию поиска в моем проекте 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 »в строке 3SELECT
prod_id
FROM (product_search
) WHEREMATCH
(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%';