使用 like 或 包含 SQL 搜索


sql search with like or contains

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

此表中的一行包含值 AAA 和值 BBB column_B column_A。

如果我搜索 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 BBB%"或"%AAA xyz%",则不会得到任何结果。

我搜索的值来自搜索表单。只要用户只输入BBB或AAA就可以了,当他使用AAA或BBB的组合以及其他搜索不起作用的东西时。

我该如何解决这个问题?我是否需要像这里提到的那样拆分搜索词:http://www.iamcal.com/publish/articles/php/search/

您可以使用

如下所示的正则表达式来搜索 AAA 或 BBB,column_A:

 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]."%'";}

然后将$SQLOPTION值添加到我的查询中。