5

我有一个表用户,其中包含字段(id、first_name、middle_name、last_name)。

我想写一个查询来通过他的名字找到一个用户。姓名可以是名字、中间名或姓氏。

$sql = "SELECT * FROM user 
        WHERE first_name like '%$name%' OR  
              middle_name like '%$name%' OR
              last_name like '%$name%'";

它是有效的查询吗?(安全问题暂时搁置。)

4

3 回答 3

3

更改表并添加复合全文索引,First_name,second_name,last_name然后使用此查询

select * 
from table_name 
where match (`First_name`,`second_name`,`last_name`) against('name')

它比您的查询快得多。

于 2012-04-04T07:42:27.023 回答
1

只要LIKE '%something%'在 WHERE 子句中有一个,就强制执行表扫描。所以是的,它是低效的,但是一三个LIKE语句不会有什么不同。

表扫描是最大的性能损失。

考虑查看 MySQL 的全文搜索功能。它旨在更有效地回答此类查询。

于 2012-04-04T07:06:30.480 回答
0

如果您需要在多个字段中搜索模式,并且您有权更改表架构,我建议您实施FULL-TEXT SEARCH

希望能帮助到你 :)

于 2012-04-04T07:09:06.160 回答