使用多个关键字进行搜索

时间:2017-02-01 12:34:13

标签: php mysql search

如果那是我的数据库

+---------------------------------+
|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',我就没有输出。

你可能需要按照每个空格分割你从文本字段中获得的字符串,然后通过数据库搜索每个分割的字符串,但是我不知道最有效的方法是什么。

2 个答案:

答案 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;