如果那是我的数据库
+---------------------------------+
|ID|Name|Department|EMail|Location|
+---------------------------------+
|3 |Sivi|Kitchen |si@gm|Home |
|4 |Mini|Office |mi@gm|Garden |
|5 |Alba|Office |al@gm|Hom |
+---------------------------------+
我还有一个搜索字段,您当前可以通过整个数据库搜索1个关键字。
例如,我输入Sivi
我得到了ouptut
|3 |Sivi|Kitchen |si@gm|Home |
如果我只搜索Off
,我会得到行:
|4 |Mini|Office |mi@gm|Garden |
|5 |Alba|Office |al@gm|Hom |
当前SQL语句:
$sql = "SELECT * FROM form WHERE CONCAT(ID, Name, Department, Email, Location) LIKE '%".$search."%'";
但是我希望能够指出每个空格都有一个新的"关键字"它再次搜索整个数据库。例如,我搜索'Siv Home'
我想获得输出
|3 |Sivi|Kitchen |si@gm|Home |
如果我搜索'Mi Offi'
,我会收到一行:
|4 |Mini|Office |mi@gm|Garden |
因为如果我当前搜索'Mi Offi'
,我就没有输出。
你可能需要按照每个空格分割你从文本字段中获得的字符串,然后通过数据库搜索每个分割的字符串,但是我不知道最有效的方法是什么。
答案 0 :(得分:0)
首先获取字符串并将其爆炸。使条件符合要求。
$inputdata='Mi Offi';
$search=explode(' ',$inputdata);
$cond=' 1=1 ';
foreach($search as $i=>$data){
if($i==0){
$cond .=" and (CONCAT(ID, Name, Department, Email, Location) LIKE '%".$data."%')` ";
}else {
$cond .=" OR (CONCAT(ID, Name, Department, Email, Location) LIKE '%".$data."%')` ";
}
}
$sql = "SELECT * FROM form WHERE".$cond ;
答案 1 :(得分:0)
会接近这样的事情:
$sOutput = '';
$sSearchString = 'search1 search2 search 3';
$aSearchTerms = explode(" ", $sSearchString);
if($aSearchTerms){
foreach ($aSearchTerms as $iPos => $sTerm) {
if($sOutput != '') $sOutput .= " OR ColName ";
$sOutput .= "LIKE '%".$sTerm."%' ";
}
}
echo $sOutput;
exit;