匹配不获取多列

时间:2016-06-08 19:11:56

标签: mysql mysqli full-text-search prepared-statement match-against

我有一个非常简单的FULLTEXT搜索和准备好的语句。 我的所有列都被正确编入索引为FULLTEXT。

如果我尝试匹配一列,搜索和提取工作正常,但是,当我一次使用2列时,我无法获取结果,尽管它们是预期的。 1)我相信我的错误是在我的代码的fetch部分,但我不明白为什么这将是多列MATCH的问题,如果它适用于1列。 2)我知道如果超过50%的表记录与搜索匹配,全文搜索不会返回结果。你怎么处理这样的案子呢?

$newParameter='%'.$sanitized.'%';
$query = "SELECT DISTINCT name, description FROM recipes 
          WHERE MATCH (name, description) AGAINST (?)";

if($stmt = $this->mysqli->prepare($query))
  {
    $stmt->bind_param('s', $newParameter);
    $stmt->execute();

    /* bind results to prepared statement */
    $stmt->store_result();
    $stmt->bind_result($name, $description);

    /* fetch values */
    while ($stmt->fetch()) {
    /*  
     *  ERROR HERE:
     *  NOT ENTERING HERE WITH MULTICIOLUM MATCHING.
     */
      echo $name . ", " . $description . "<br>";
    }

  } else {
    echo "Empty query";
  }

注意:如果单独使用MATCH(名称)或MATCH(描述),此代码将返回应该的内容。 TY帮助。

1 个答案:

答案 0 :(得分:1)

已解决:问题在于索引。

具体来说,我的列被逐个索引,使用ADD FULLTEXT(column_name)。

但是,要使其正常工作,必须使用列表将列编入索引 CREATE FULLTEXT INDEX idx on table_name(columns_names);

请参阅https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html

并使用MySQLWorkbench测试您的查询并获取有关PHP查询可能无法打印的错误的信息。