我有一个表用户,其中包含(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%'";
这是有效的查询吗? (暂时保留安全问题。)
答案 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。
希望有所帮助:)