2014-04-05 152 views
0

我试图创建一个搜索引擎来根据用户的名字搜索用户。创建搜索引擎

这里是什么,我能在这个时刻做一个例子: 我要搜索大卫(姓)琼斯(名) - >当我键入:“大”或“VID”或“J”或'ones'它给了我David Jones 但是当我输入'David J'时,它什么也不给。

以哪种方式必须更改我的查询以在同一时间在两个字段上进行搜索?

查询:

public function Search($searchinput) 
    { 
      $db = new Db(); 
      $select = "SELECT * FROM tblusers WHERE name LIKE '%" . $searchinput . "%' OR surname LIKE'%" . $searchinput . "%'"; 
      $result = $db->conn->query($select); 
      return $result; 

} 
+0

既然你是对的匹配自然语言文本,你应该打破下来一个字为基础的方法。单词用自然语言中的whitesapce字符分隔。因此,_always_用空格分隔可用输入,并搜索由此获得的单个“单词”。然后结合搜索结果。这是人们本能的期望。 – arkascha

+0

[链接](http://toabigo.net23.net/)看看我的旧搜索引擎项目纯PHP –

回答

0

使用CONCAT尝试此查询:

$select = "SELECT * FROM tblusers WHERE name LIKE '%". $searchinput ."%' OR surname LIKE '%". $searchinput ."%' OR CONCAT(name,' ',surname) LIKE '%". $searchinput ."%' "; 
0
比MySQL快得多搜索文本

问题是,你试图匹配戴维J的名字或姓氏,但正如我看到你的数据库的外观如下所示:

Name | Surnam 
Davud | Jones 

而且你喜欢的语句是寻找:“大卫J”为名字或姓氏,给你正确的结果(零),因为不存在与名字或姓氏,如“大卫·J”的任何行,在你的情况下,最好的解决办法将是Concat的以姓氏名字,然后向他们作出这样statment:

Select * FROM tbulsers WHERE CONCAT(name, ' ', surname) LIKE "%David J%" 
+0

我试过这2个SQL语句,但他们都没有工作:\t \t $ select =“SELECT * FROM tblusers WHERE CONCAT(name,'',surname)LIKE'%。$ searchinput。%'“; $ select =“SELECT * FROM tblusers WHERE name LIKE'%”。 $ searchinput。“%”或姓氏LIKE'%“。 $ searchinput。“%'或CONCAT(姓名,'',姓氏)LIKE'%”。 $ searchinput。“%'”; –

+0

我没有看到其他东西,请验证你的分贝行有任何反馈。问候 –