在mysql中搜索查询优化

时间:2014-06-25 12:08:13

标签: php mysql

我正在处理搜索查询。 我的桌子上有一个字符串“thomas alva edison”。 我希望在用户搜索时显示此字符串,

  托马斯阿尔瓦爱迪生,托马斯,阿尔瓦,爱迪生,托马斯阿尔瓦,托马斯爱迪生等

但不适用于

  

寿,儿子,ALV等

我做的是

select name from tbl_names where name like "."'%".$key."%'

如何修改此查询以获得正确的结果。

3 个答案:

答案 0 :(得分:3)

我建议在查询中使用REGEX进行单词搜索,

查询应该是:

SELECT name FROM `tbl_names` WHERE `name` REGEXP '[[:<:]]thomas[[:>:]]'

希望这对你有用。有关详细信息,请查看此Check this answer

答案 1 :(得分:3)

MySQL提供了一种实现一点点搜索的精彩方式(全文搜索)。 http://viralpatel.net/blogs/full-text-search-using-mysql-full-text-search-capabilities/

示例:

select name from tbl_names WHERE MATCH (name) AGAINST ('thomas');

我们在全文搜索中有很多选项,只有MySQL 5.6 MYISAM引擎。

答案 2 :(得分:0)

你也可以尝试这样的事情:

$sql = "select name from tbl_names where ";
$array = explode(" ",$key);
$or = "";
foreach($array as $word) {
  if(strlen(trim($word))>0) {
    $sql.= $or."(name like '%".$word."%')";
    $or = " OR ";
  }
}