2

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_idLIKE'%silk%' OR prod_skuLIKE'%silk%' OR `prod'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

SELECT prod_idFROM(product_search)WHERE MATCHprod_titleprod_desc)AGAINST('silk')OR prod_idLIKE'%silk%' OR prod_skuLIKE'%silk%' OR prod_titleLIKE'%silk%' OR prod_descLIKE'%silk%'

ファイル名:models / products_model.php

行番号:430

なぜMATCHの周りにバックティックを配置するのですか?

MATCHとそれに続く角かっこの間のスペースを削除すると、次のエラーメッセージが表示されます。

エラー番号:1191

列リストに一致するFULLTEXTインデックスが見つかりません

SELECT prod_idFROM(product_search)WHERE MATCH(prod_titleprod_desc)AGAINST('silk')OR prod_idLIKE'%silk%' OR prod_skuLIKE'%silk%' OR prod_titleLIKE'%silk%' OR prod_descLIKE'%silk%'

ファイル名:models / products_model.php

行番号:430

ただし、topコマンドを使用してフルテキストインデックスを追加しました。何が問題になっていますか?

4

1 に答える 1

4

以下のステートメントに対してINBOOLEANMODEを追加することで、問題を解決しました。

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%';
于 2012-08-02T11:15:11.510 に答える