2012-04-04 92 views
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%'"; 

查詢效率高嗎? (離開安全問題暫且。)

+1

與什麼相比它有效嗎? – Jon 2012-04-04 07:05:16

+0

根據這個評論http://stackoverflow.com/questions/9986678/searching-more-than-1-column/9986696#comment12762483_9986696聯盟是更快 – 2012-04-04 07:06:21

+0

@Jon我想得到一個更好的查詢來完成這項任務。我沒有和任何東西比較。 – 2012-04-04 07:55:11

回答

3

alter table和上First_name,second_name,last_name添加複合全文索引,然後使用該查詢

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

它然後將查詢相當快很多。

1

只要您在WHERE子句中有一個LIKE '%something%',會強制表掃描。所以是的,這是效率低下的,但是一個或三個LIKE聲明幾乎沒有什麼區別。

表掃描是性能大打擊。

考慮查看MySQL的Full Text Search功能。它旨在更有效地回答這類查詢。

0

如果您需要在多個字段中搜索模式,並且如果您有權更改表格模式,我會建議您執行FULL-TEXT SEARCH

希望它能幫助:)