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構文にエラーがあります。3行目の「AGAINST('silk')OR
prod_id
LIKE'%silk%' ORprod_sku
LIKE'%silk%' OR `prod'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。SELECT
prod_id
FROM(product_search
)WHEREMATCH
(prod_title
、prod_desc
)AGAINST('silk')ORprod_id
LIKE'%silk%' ORprod_sku
LIKE'%silk%' ORprod_title
LIKE'%silk%' ORprod_desc
LIKE'%silk%'ファイル名:models / products_model.php
行番号:430
なぜMATCHの周りにバックティックを配置するのですか?
MATCHとそれに続く角かっこの間のスペースを削除すると、次のエラーメッセージが表示されます。
エラー番号:1191
列リストに一致するFULLTEXTインデックスが見つかりません
SELECT
prod_id
FROM(product_search
)WHERE MATCH(prod_title
、prod_desc
)AGAINST('silk')ORprod_id
LIKE'%silk%' ORprod_sku
LIKE'%silk%' ORprod_title
LIKE'%silk%' ORprod_desc
LIKE'%silk%'ファイル名:models / products_model.php
行番号:430
ただし、topコマンドを使用してフルテキストインデックスを追加しました。何が問題になっていますか?