我正在尝试在我的codeIgniter项目中实现搜索功能。我有一个名为 product_search 的表,其中使用以下命令设置了全文索引:
ALTER TABLE `product_search` ADD FULLTEXT (`prod_title`, `prod_desc`)
然后,我使用以下代码点火器代码搜索它:
$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 服务器版本对应的手册,了解在第 3 行的"AGAINST ('silk
'( 或prod_id
(如 '%silk%' 或prod_sku
'%silk%' 或 'prod' 附近使用的正确语法(从 (
'丝绸'( 或product_search
( 中选择prod_id
,其中MATCH
(prod_title
,prod_desc
( 反对 (prod_id
如 '%丝%' 或prod_sku
如 '%丝%' 或prod_title
如 '%丝%' 或prod_desc
如 '%丝%'文件名:型号/products_model.php
行号:430
为什么它在比赛周围放了反引号?
如果我删除 MATCH 和它后面的括号之间的空格,则会收到以下错误消息:
错误号:1191
找不到与列列表匹配的全文索引
从 (
'丝绸'( 或product_search
( 中选择prod_id
其中匹配(prod_title
,prod_desc
( 与 (prod_id
如 '%丝%' 或prod_sku
如 '%丝%' 或prod_title
如 '%丝%' 或prod_desc
如 '%丝%'文件名:型号/products_model.php
行号:430
但是,我使用 top 命令添加了全文索引。出了什么问题?
我通过将布尔模式添加到反对部分的语句来解决问题,如下所示:
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%';