在匹配 mysql 中使用变量的技巧
Trick to use variable in match against mysql
请先阅读我的问题,然后你会发现它不是其他问题的重复。
我使用 sphinx 搜索进行 98% 的搜索,但只需要对一个查询使用匹配。
正如我们从 mysql 文档中了解到的那样,AGAINST 只接受字符串。The search string must be a literal string, not a variable or a column name.
但我找到了这个 link http://bugs.mysql.com/bug.php?id=66573 ,上面写着 possible.But 我不确定如何在我的情况下使用它。
这是我的代码
$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()
给出了错误,因为它应该 be.How 在这个 case.I 中使用那个 link 的技巧不知道 [=] 的用法4=] 其中 link.
提前致谢。
当他们说 "The search string must be a literal string, not a variable or a column name" 并不意味着您不能使用变量来创建查询字符串。
所以让你的查询非常简单就可以了。
您的 WHERE 可能是:
WHERE `student` = $busi_title OR `student` = $category
link 没有显示绕过 MySQL 限制的技巧。这是一份错误报告,显示了 MySQL 文档中的错误陈述。文档中的声明现已更正。
您收到错误的原因是您向 AGAINST
发送了两个参数,而它只接受一个。您可以在 AGAINST
中使用 MySQL 变量,这是错误报告的内容,但这与 PHP 变量无关你正在使用。
编辑
阅读您的回复后,我怀疑您的语法倒退了。
SELECT * FROM `user`.`user_dets` WHERE MATCH(busi_title, category) AGAINST('student')
但请注意文档中的这一点:
The MATCH() column list must match exactly the column list in some FULLTEXT index definition for the table, unless this MATCH() is IN BOOLEAN MODE. Boolean-mode searches can be done on nonindexed columns, although they are likely to be slow.
如果您没有全文索引,您实际上需要这个:
SELECT * FROM `user`.`user_dets` WHERE `busi_title` LIKE '%student%' OR `category` LIKE '%student%'
请先阅读我的问题,然后你会发现它不是其他问题的重复。
我使用 sphinx 搜索进行 98% 的搜索,但只需要对一个查询使用匹配。
正如我们从 mysql 文档中了解到的那样,AGAINST 只接受字符串。The search string must be a literal string, not a variable or a column name.
但我找到了这个 link http://bugs.mysql.com/bug.php?id=66573 ,上面写着 possible.But 我不确定如何在我的情况下使用它。
这是我的代码
$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()
给出了错误,因为它应该 be.How 在这个 case.I 中使用那个 link 的技巧不知道 [=] 的用法4=] 其中 link.
提前致谢。
当他们说 "The search string must be a literal string, not a variable or a column name" 并不意味着您不能使用变量来创建查询字符串。
所以让你的查询非常简单就可以了。
您的 WHERE 可能是:
WHERE `student` = $busi_title OR `student` = $category
link 没有显示绕过 MySQL 限制的技巧。这是一份错误报告,显示了 MySQL 文档中的错误陈述。文档中的声明现已更正。
您收到错误的原因是您向 AGAINST
发送了两个参数,而它只接受一个。您可以在 AGAINST
中使用 MySQL 变量,这是错误报告的内容,但这与 PHP 变量无关你正在使用。
编辑
阅读您的回复后,我怀疑您的语法倒退了。
SELECT * FROM `user`.`user_dets` WHERE MATCH(busi_title, category) AGAINST('student')
但请注意文档中的这一点:
The MATCH() column list must match exactly the column list in some FULLTEXT index definition for the table, unless this MATCH() is IN BOOLEAN MODE. Boolean-mode searches can be done on nonindexed columns, although they are likely to be slow.
如果您没有全文索引,您实际上需要这个:
SELECT * FROM `user`.`user_dets` WHERE `busi_title` LIKE '%student%' OR `category` LIKE '%student%'