Php 使用like或contains进行sql搜索
我有一个表,有两列,分别是列a和列B 此表中的一行在列A中包含值AAA,列B中包含值BBB 如果我搜索AAA或BBB与Php 使用like或contains进行sql搜索,php,mysql,search,Php,Mysql,Search,我有一个表,有两列,分别是列a和列B 此表中的一行在列A中包含值AAA,列B中包含值BBB 如果我搜索AAA或BBB与 SELECT * FROM table WHERE column_A LIKE '%AAA%' OR column_B LIKE '%AAA%'; 或 我得到一个结果 但是,如果我搜索“%AAA BBB%”或“%AAA xyz%”,则不会得到任何结果 我搜索的值来自搜索表单。只要用户只输入BBB或AAA all就可以了,当他使用AAA或BBB和其他东西的组合时,搜索就不起作
SELECT * FROM table WHERE column_A LIKE '%AAA%' OR column_B LIKE '%AAA%';
或
我得到一个结果
但是,如果我搜索“%AAA BBB%”或“%AAA xyz%”,则不会得到任何结果
我搜索的值来自搜索表单。只要用户只输入BBB或AAA all就可以了,当他使用AAA或BBB和其他东西的组合时,搜索就不起作用了
我怎样才能解决这个问题?我是否需要像这里提到的那样拆分搜索词:您可以像下面这样使用regexp来搜索列A中的AAA或BBB:
SELECT * FROM table WHERE column_A REGEXP '.*[A|B]{3}.*$'
既然您已经标记了php,那么我可以提出如下建议:
<?php
$res ="AAA BBB CCC";// your input from use
$res=explode(' ', $res);
$sql="SELECT * FROM table where column_A";
$flag=false;
for($i =0;$i< sizeof($res);$i++){
if(!$flag){
$flag=true;
$sql .=" like '%".$res[$i]."%'";
}else{
$sql .=" or like '%".$res[$i]."%'";
}
}
echo $sql;// resultant sql need not to echo only to show
谢谢大家的评论,我终于这样解决了:
$string = $_GET['searchterm'];
$words = EXPLODE(" ",$string);
FOR($i=0;$i<count($words);$i++){$SQLOPTION .= "AND CONCAT(column_A,column_B) LIKE '%".$words[$i]."%'";}
$string=$\u GET['searchterm'];
$words=分解(“,$string);
对于($i=0;$i您需要拆分搜索词或使用全文搜索。您可以参考全文搜索的链接“%AAA xyz%”表示您正在查找“AAA xyz”+非“AAA”或“xyz”的内容您的搜索方法正确吗?如果您想获取包含列a的字符串,那么您需要将其转过来,不是吗?例如,像CO一样的“AAA xyz”在哪里NCAT(“%”,列_A“%”)?这与我的解决方案非常相似,所以您可以获得我的投票。谢谢!
$string = $_GET['searchterm'];
$words = EXPLODE(" ",$string);
FOR($i=0;$i<count($words);$i++){$SQLOPTION .= "AND CONCAT(column_A,column_B) LIKE '%".$words[$i]."%'";}