0

请先阅读我的问题,然后你会发现它不是其他问题的重复。

我正在使用 sphinx 搜索 98% 的搜索,但只需要对一个查询使用匹配。

正如我们从 mysql 文档中知道的那样, AGAINST 只接受字符串。The search string must be a literal string, not a variable or a column name.

但我找到了这个链接http://bugs.mysql.com/bug.php?id=66573,它说这是可能的。但我不确定如何在我的情况下使用它。

这是我的代码

    $sqli="SELECT busi_title,category FROM `user`.`user_det`";
    $queryi=mysqli_query($connecti,$sqli);
        if(mysqli_num_rows($queryi)>0){
            while($rowi=mysqli_fetch_assoc($queryi)){
              $busi_title=$rowi['busi_title'];
              $category=$rowi['category'];
            }

        }else{
            echo "OH NO";
         }

$sqlj="SELECT * FROM `user`.`user_det` WHERE MATCH(student) AGAINST('$busi_title','$category')";
$queryj=mysqli_query($connecti,$sqlj);
     if(mysqli_num_rows($queryj)>0){
        ..............................
        ..............................
     }else{  
        foreach ( $res["matches"] as $doc => $docinfo ) {
         ................................
          ...............................
         }
      }

MATCH() AGAINST()正在给出错误,因为它应该是。在这种情况下如何使用该链接的技巧。我不知道该@word:=链接的用途。

提前致谢。

4

2 回答 2

1

该链接没有显示绕过 MySQL 限制的技巧。这是一个错误报告,表明 MySQL 文档中的语句不正确。文档中的声明现已更正。

您收到错误的原因是因为您发送了两个参数,AGAINST而它只接受一个。您可以使用一个MySQL变量,AGAINST这就是错误报告的内容,但这与您正在使用的 PHP 变量无关。

编辑

在阅读您的回复后,我宁愿怀疑您的语法倒退了。

SELECT * FROM `user`.`user_dets` WHERE MATCH(busi_title, category) AGAINST('student')

但请注意文档中的这一点:

MATCH() 列列表必须与表的某些 FULLTEXT 索引定义中的列列表完全匹配,除非此 MATCH() 处于布尔模式。布尔模式搜索可以在非索引列上完成,尽管它们可能很慢。

如果你没有全文索引,你实际上会想要这个:

SELECT * FROM `user`.`user_dets` WHERE `busi_title` LIKE '%student%' OR `category` LIKE '%student%'
于 2015-01-07T22:42:10.350 回答
0

当他们说“搜索字符串必须是文字字符串,而不是变量或列名”时,并不意味着您不能使用变量来创建查询字符串。

因此,可以使您的查询非常简单。
你的 WHERE 可能是这样的:

WHERE `student` = $busi_title OR `student` = $category
于 2015-01-07T22:35:01.647 回答