MySQL 多字段搜索使用 Like 子句

标签 mysql search full-text-search where-clause

我正在尝试使用 MySQL 中的 Like 子句搜索多个字段,但似乎无法返回任何结果。这是我正在使用的查询:

SELECT player_id, 1st_name, last_name, birth_date, nationality, pasition 
FROM `people` 
WHERE player_id  LIKE '%Keyword%' 
  OR 1st_name    LIKE '%Keyword%' 
  OR last_name   LIKE '%Keyword%' 
  OR birth_date  LIKE '%Keyword%' 
  OR nationality LIKE '%Keyword%'
  OR pasition    LIKE '%Keyword%' 
ORDER BY `people`.`1st_name` ASC LIMIT 0 , 60

关键字是php传递的变量。

最佳答案

您应该为此使用 FULLTEXT 索引。您可以搜索多个列,并且它的运行速度比使用带有通配符的 LIKE 快数百或数千倍。

CREATE FULLTEXT INDEX ft_people ON `people` 
  (player_id, `1st_name`, last_name, birth_date, nationality, position);

SELECT player_id, 1st_name, last_name, birth_date, nationality, pasition 
FROM `people` 
WHERE MATCH(player_id, `1st_name`, last_name, birth_date, nationality, position) 
  AGAINST('+Keyword' IN BOOLEAN MODE) 
ORDER BY `people`.`1st_name` ASC LIMIT 0 , 60

参见http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

请注意,在 MySQL 5.6 之前的版本中,仅 MyISAM 存储引擎支持 FULLTEXT 索引。

关于MySQL 多字段搜索使用 Like 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8555935/

相关文章:

mysql - I/O 操作阻塞 mysql 事务

mysql - mysql连接三个表

.net - 我如何从 .Net 文化中获取 Sql 语言名称

java - 组合框依赖于另一个组合框 - JavaFX

mysql - 数据库 :migrate does not create tables

algorithm - 有哪些算法可以检测光影及其参数?

Jquery 匹配包含值的属性

jquery - 如何将多个搜索值传递给数据表中的search.draw函数?

MySQL - 文本搜索和数据库结构

mysql - 具有全文过滤的子查询中断 MYSQL 连接