2017-03-01 71 views
0

我有以下查詢來執行多列搜索:在InnoDB中錯誤的MySQL全文搜索

SELECT 
    prod.pid, 
    prod.pname, 
    prod.description, 
    prod.status, 
    foto.set_cover, 
    foto.file 
FROM products prod 
INNER JOIN second_child_categories secd ON prod.category_id = secd.second_id 
INNER JOIN photos foto ON prod.pid = foto.pid 
WHERE MATCH (prod.pname, prod.description) 
AGAINST ('home') 
AND foto.set_cover = '1' 
AND prod.status = '1' 
ORDER BY prod.created_date DESC 

我使用InnoDB引擎和MySQL版本14.14 DISTRIB 35年6月5日

products表添加fulltext index

ALTER TABLE `products` ADD FULLTEXT (`pname`); 
ALTER TABLE `products` ADD FULLTEXT (`description`); 

我運行查詢並得到錯誤:

#1191 - Can't find FULLTEXT index matching the column list 

查詢有什麼問題?

在此先感謝。

回答

1

當您使用MATCH()時,您指定的列必須一起索引爲一個全文索引,而不是每個列分別位於單獨的全文索引中。

給你顯示查詢,你需要這樣定義的索引:

ALTER TABLE `products` ADD FULLTEXT (`pname`,`description`); 
+0

謝謝,它的作品添加FULLTEXT指數一起。然而,我想知道如何在連接表中添加FULLTEXT,如果我還想將'foto.file'作爲搜索列的一部分呢? –

+0

您無法定義跨越多個表的任何類型的索引。您必須在每個表中定義一個索引,併爲每個表使用一個MATCH()調用。從2009年的回答中看到這個答案的例子! http://stackoverflow.com/questions/1241602/mysql-match-across-multiple-tables/1241739#1241739 –