我有一个包含 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值添加到我的查询中。