我正在尝试在我的 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 ('silk') 或附近使用的正确语法prod_id
喜欢“%silk%”或prod_sku
LIKE '%silk%' OR 'prod' 在第 3 行
SELECT prod_id
FROM (product_search
) WHERE MATCH
(prod_title
, prod_desc
)反对(“丝绸”)或prod_id
喜欢“%silk%”或prod_sku
喜欢“%silk%”或prod_title
喜欢“%silk%”或prod_desc
喜欢“%丝绸%”
文件名:models/products_model.php
线路号码:430
为什么要在 MATCH 周围加上反引号?
如果我删除 MATCH 及其后面的括号之间的空格,则会收到以下错误消息:
错误号:1191
找不到与列列表匹配的 FULLTEXT 索引
SELECT prod_id
FROM (product_search
) 哪里匹配(prod_title
, prod_desc
)反对(“丝绸”)或prod_id
喜欢“%silk%”或prod_sku
喜欢“%silk%”或prod_title
喜欢“%silk%”或prod_desc
喜欢“%丝绸%”
文件名:models/products_model.php
线路号码:430
但是,我使用 top 命令添加全文索引。
出了什么问题?