在表的多个字段中搜索字符串

时间:2012-04-04 07:03:54

标签: php mysql sql

我有一个表用户,其中包含(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%'";

这是有效的查询吗? (暂时保留安全问题。)

3 个答案:

答案 0 :(得分:3)

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

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

它比你的查询快得多。

答案 1 :(得分:1)

只要WHERE子句中有LIKE '%something%',就会强制进行表扫描。所以是的,这是低效的,但是一个或三个LIKE语句几乎没有什么区别。

表格扫描是一个很大的性能影响。

考虑一下MySQL的Full Text Search能力。它旨在更有效地回答此类查询。

答案 2 :(得分:0)

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

希望有所帮助:)