2015-10-18 63 views
0

子句中的子查詢中使用全文mysql查詢我想在我的網站中創建搜索系統,但我遇到了一些問題。我可以在

我有兩個表的名字是商店和產品。 我在桌子上有一些商店,也許一些商店有一些pruduct也許不是。 如果每個客戶搜索的東西,如果單詞與商店名稱查詢匹配首先列出商店信息,然後如果我們有一些商店的產品匹配這個詞,然後添加到列表。它有一個相關性查詢。

我的表引擎InnoDB和版本5.6+錯誤消息:

1214 - 所使用的表類型不支持FULLTEXT索引

我使用此查詢,但我知道這是不正確,並有錯誤消息,但我不知道如何解決它來執行我的想法。

select `shops`.`name`,`shops`.`nName`,`product`.`productname`,`product`.`productnName`, 
((MATCH (`shops`.`name`,`shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE) * 2) + 
(MATCH (`product`.`productname`,`product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE) * 1.5)) as `relevance` 
from `shops` left OUTER JOIN 
(select `productname`,`productnName`,`sId` from `product` where MATCH (`productname`,`productnName`) AGAINST ('apple' IN BOOLEAN MODE)) as `product` on (`product`.`sId`=`shops`.`id`) 
where 
(
    MATCH (`shops`.`name`, `shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE) and 
    MATCH (`product`.`productname`, `product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE) 
) 
or 
    MATCH (`shops`.`name`, `shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE) 
or 
    MATCH (`product`.`productname`, `product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE) 
ORDER BY `relevance` DESC 

回答

0

你可能需要FULLTEXT指標添加到您的表。

ALTER TABLE shops 
ADD FULLTEXT INDEX (`name`,`nName`); 

ALTER TABLE product 
ADD FULLTEXT INDEX (`productname`,`productnName`); 

編輯:我認爲你正在失去全文索引的子選擇,給這個去。

select `shops`.`name`,`shops`.`nName`,`product`.`productname`,`product`.`productnName`, 
((MATCH (`shops`.`name`,`shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE) * 2) + 
(MATCH (`product`.`productname`,`product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE) * 1.5)) as `relevance` 
from `shops`,`product` 
where 
    MATCH (`shops`.`name`, `shops`.`nName`) AGAINST ('apple' IN BOOLEAN MODE) 
or 
    MATCH (`product`.`productname`, `product`.`productnName`) AGAINST ('apple' IN BOOLEAN MODE) 
ORDER BY `relevance` DESC 
+0

我爲這些表添加全文索引,但我認爲當子查詢創建新表時它不支持全文。 – farzad

+0

我編輯了我的答案,看看。 –

+0

我寫了這段代碼,但它有一個問題。因爲如果顧客搜索店名然後得到店鋪和n店鋪產品。對於這個問題,我在from子句中使用子查詢和左連接產品 – farzad