【问题标题】:sql search with like or containssql搜索喜欢或包含
【发布时间】:2014-12-02 12:10:39
【问题描述】:

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

此表中的一行在列_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 BBB%' 或 '%AAA xyz%' 我没有得到任何结果。

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

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

【问题讨论】:

  • 您需要拆分搜索词或使用全文搜索。
  • '%AAA xyz% 表示您正在寻找 'AAA xyz' + 不是 'AAA' 或 'xyz' 的东西
  • 您的搜索方式正确吗?如果你想得到包含column_a的字符串,那么你需要把它转过来,不是吗即WHERE 'AAA xyz' like CONCAT('%',column_A,'%')?

标签: php mysql search


【解决方案1】:

您可以使用下面的正则表达式在 column_A 中搜索 AAA 或 BBB:

 SELECT * FROM table WHERE column_A REGEXP '.*[A|B]{3}.*$'

【讨论】:

    【解决方案2】:

    既然你已经标记了 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
    

    【讨论】:

    • 这与我的解决方案非常相似,所以你得到我的投票。谢谢!
    【解决方案3】:

    感谢所有cmets,我终于这样解决了:

    $string = $_GET['searchterm'];
    
    $words = EXPLODE(" ",$string);
    
    FOR($i=0;$i<count($words);$i++){$SQLOPTION  .= "AND CONCAT(column_A,column_B) LIKE '%".$words[$i]."%'";}
    

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

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2015-09-19
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多