使用like或contains进行sql搜索

时间:2014-12-02 12:10:39

标签: php mysql search

我有一个包含2列名为column_A和column_B的表。

此表中的一行在column_A中包含值AAA,列_B包含值BBB。

如果我用

搜索AAA或BBB
SELECT * 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/

3 个答案:

答案 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值添加到我的查询中。