我可以在subquery in子句中使用全文mysql查询

时间:2015-10-18 12:42:48

标签: php mysql full-text-search subquery left-join

我想在我的网站上创建搜索系统,但我遇到了一些问题。

我有两张桌子,名字是商店和产品。 我在桌子上有一些商店,也许有些商店可能没有。 如果每个客户搜索一下如果单词与商店名称匹配查询首先列出商店信息,那么如果我们有一些商店产品与此单词匹配,则添加到列表。它有相关性查询。

  

我的表引擎是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

1 个答案:

答案 0 :(得分:0)

您可能需要在表中添加FULLTEXT索引。

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

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

编辑:我认为你正在丢失subselect中的全文索引,给它一个去吧。

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