我有一个包含2列名为column_A和column_B的表。
此表中的一行在column_A中包含值AAA,列_B包含值BBB。
如果我用
搜索AAA或BBBSELECT * FROM table WHERE column_A LIKE '%AAA%' OR column_B LIKE '%AAA%';
或
SELECT * FROM table WHERE column_A LIKE '%BBB%' OR column_B LIKE '%BBB%';
我得到了一个结果。
但是,如果我搜索“AAA AAA BBB%'或者'%AAA xyz%'我没有结果。
我搜索的值来自搜索表单。只要用户只输入BBB或AAA,一切都很好,只要他使用AAA或BBB的组合以及其他搜索功能也无效。
我该如何解决?我是否需要拆分这里提到的搜索词:http://www.iamcal.com/publish/articles/php/search/
答案 0 :(得分:2)
您可以使用下面的regexp来搜索column_A中的AAA或BBB:
SELECT * FROM table WHERE column_A REGEXP '.*[A|B]{3}.*$'
答案 1 :(得分:0)
既然你已经标记了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
答案 2 :(得分:0)
感谢所有评论,我终于解决了这个问题:
$string = $_GET['searchterm'];
$words = EXPLODE(" ",$string);
FOR($i=0;$i<count($words);$i++){$SQLOPTION .= "AND CONCAT(column_A,column_B) LIKE '%".$words[$i]."%'";}
然后将$ SQLOPTION值添加到我的查询中。