请先阅读我的问题,然后你会发现它与其他问题没有重复。
我使用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:=
的使用。< / p>
提前致谢。
答案 0 :(得分:1)
该链接并未显示解决MySQL限制的技巧。这是一个错误报告,演示了MySQL文档中的错误语句。文档中的声明现已更正。
您收到错误的原因是您向AGAINST
发送了两个参数,并且只接受一个参数。您可以在AGAINST
中使用 MySQL 变量,这是错误报告的内容,但这与您正在使用的PHP变量无关。
修改强>
在阅读您的回复后,我宁愿怀疑您的语法倒退了。
SELECT * FROM `user`.`user_dets` WHERE MATCH(busi_title, category) AGAINST('student')
但请注意文档:
MATCH()列列表必须与表的某些FULLTEXT索引定义中的列列表完全匹配,除非此MATCH()是IN BOOLEAN MODE。布尔模式搜索可以在非索引列上完成,但它们可能很慢。
如果您没有全文索引,您实际上会想要这个:
SELECT * FROM `user`.`user_dets` WHERE `busi_title` LIKE '%student%' OR `category` LIKE '%student%'
答案 1 :(得分:0)
当他们说&#34;搜索字符串必须是文字字符串,而不是变量或列名称&#34;并不意味着您不能使用变量来创建查询字符串。
所以可以让你的查询变得非常简单 你的地点可能是这样的:
WHERE `student` = $busi_title OR `student` = $category