使用全文

时间:2018-01-20 08:22:19

标签: phpmyadmin myisam fulltext-index

我似乎遇到了代码问题,无法追踪问题。我想在我的数据库中搜索多个列,但是我收到了一个错误报告。

我改变了这样的表

"ALTER TABLE products ADD FULLTEXT alltext (`title`, `cat`, `status`, `description`, `tags`)";

并且还将默认引擎更改为MyISAM

但是当我通过搜索我的搜索框来运行此查询时,我收到了错误。

$sql="SELECT * FROM products as p INNER JOIN amenities as a ON p.product_id=a.product_id WHERE MATCH(p.title,p.cat,p.status,p.description,p.tags) AGAINST ('$search' )"; 
mysqli_query($con,$sql);

其他条件如下......

如果我的搜索词在任何行中,哪个应该给我结果..但它返回错误的查询错误。还尝试在'$ search'之后添加一个IN BOOLEAN ...即

 $sql="SELECT * FROM products as p INNER JOIN amenities as a ON p.product_id=a.product_id WHERE MATCH(p.title,p.cat,p.status,p.description,p.tags) AGAINST ('$search' IN BOOLEAN)";

如果表格行中存在明显匹配的术语,则不会产生任何结果。

这是我的搜索变量

$search = mysqli_real_escape_string($con, $_POST['q']);

对此有任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

从我在这里看到的很难给你一个直接的解决方案,但我会遵循这个策略:

  1. 使用您知道应该运行的查询字符串替换查询中的$search变量。
  2. BOOLEAN查询使用特殊语言语法,只有在NATURAL LANGUAGE模式下获得良好结果后才能尝试。
  3. 钓鱼吸管:我现在没有时间对此进行测试,但我不确定mysql是否允许您在类型不兼容的列上创建FULLTEXT索引,或者是否会抱怨索引创建。只是要检查一下。
  4.   

    全文索引只能用于MyISAM表。 (在MySQL 5.6及更高版本中,它们也可以与InnoDB表一起使用。)只能为CHAR,VARCHAR或TEXT列创建全文索引。