使用LIKE获取多个结果


Get multiple results using LIKE

假设我的数据库中有一些记录,数据如下:

约翰·默多克


我是John Murdoch
我的名字是约翰,我的第二个名字是默多克

我有一个搜索表单,我输入"john murdoch",它将运行这个查询:

$search //contain the search string in this case is john murdoch
$sql = mysqli_query($sql, "SELECT * FROM table WHERE column LIKE '%$search%'");
while($row = mysql_fetch_assoc($sql)){
echo $row['first']."<br>";
}

这将只返回前两行,因为只有这些行有两个单词在一起。我怎样才能返回另一行,即使单词是分开的?我知道我可以打开字符串并检查每个片段,但我正在寻找一种更稳定和有效的方法。

只需在查询前用通配符%替换标点符号和空格。

$search = str_replace ( array( '.', ' ', "'", '-' ), '%', $search );

这仍然要求在文本中第一个单词出现在第二个单词之前。因此,如果你搜索的是"Murdoch John",你将不会返回任何结果。

更好的答案是在列上使用FULLTEXT搜索(在MySQL中必须这样做),并对列执行MATCH()查询,如下所示:

在每个单词前加一个加号(表示需要这个单词)

$words = '+' . str_replace( ' ', ' +', $search );

和你的查询:

SELECT * FROM table MATCH ( column ) AGAINST ( '$words' IN BOOLEAN MODE)

更多信息在这里:http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

SELECT * FROM table WHERE `column` LIKE '%john%' AND `column` LIKE '%murdoch%'
我将像这样构造这个查询:
$search_terms = array('john','murdoch');
$field_to_search = 'some_column';
$sql = 'SELECT * FROM table WHERE' . "'n";
$sql .= '`' . $field_to_search . '` LIKE ''%' 
   . implode('%'' AND `' . $field_to_search . '` LIKE ''%',$search_terms)
   . '%''';

PHP可以用于任意数量的搜索词。它需要匹配所有,因为它与AND相连。

这里是一个php提琴的链接:http://phpfiddle.org/main/code/igv-3qc