0

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

我像这样改变了桌子

"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']);

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

4

1 回答 1

0

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

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

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

于 2018-01-20T08:48:32.100 回答