2012-08-01 2 views
1

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

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"); 

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

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AGAINST ('silk') OR prod_id LIKE '%silk%' OR prod_sku LIKE '%silk%' OR `prod' at line 3

SELECT prod_id FROM (product_search) WHERE MATCH (prod_title , prod_desc) AGAINST ('silk') OR prod_id LIKE '%silk%' OR prod_sku LIKE '%silk%' OR prod_title LIKE '%silk%' OR prod_desc LIKE '%silk%'

Filename: models/products_model.php

Line Number: 430

Почему он помещает backticks вокруг MATCH?

Если удалить пространство Inbetween MATCH и скобок после него, то я получаю сообщение об ошибке:

Error Number: 1191

Can't find FULLTEXT index matching the column list

SELECT prod_id FROM (product_search) WHERE MATCH(prod_title , prod_desc) AGAINST ('silk') OR prod_id LIKE '%silk%' OR prod_sku LIKE '%silk%' OR prod_title LIKE '%silk%' OR prod_desc LIKE '%silk%'

Filename: models/products_model.php

Line Number: 430

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

ответ

3

Я решил проблему путем добавления 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%'; 
Смежные вопросы