2010-08-18 185 views
1

我有一個包含聯繫信息的表。該表有1個與名稱相關的列。它看起來像這樣:使用LIKE搜索名稱

Sort Name: 
Doe, John 
Clinton, Bill 
Dooby Doo, Scooby 

不幸的是,沒有名字/姓氏列,他們不能被添加。 如果用戶輸入搜索詞「john doe」,有沒有什麼辦法可以讓我的mysql返回「Doe,John」的列作爲我的結果?

編輯:作爲後續行動,以通過RHSeeger答案,我會做什麼用PHP

感謝您的幫助迄今

使

john doe 

$name(0=>'john', 1=>'doe') 

回答

2

我的想法是:

SELECT * FROM tablename 
WHERE LOWER(sort_name) LIKE '%name1%' 
    ... 
    AND LOWER(sort_name) LIKE '%nameN%' 

其中<名1 > ... <nameN>是個人,小寫的 「字」,在用戶請求的域名(空間分割,逗號?)。

編輯:值得注意的是,對於相當大型的數據集,像這樣的搜索將會很慢。如果您要獲取大量數據,則可以考慮使用搜索引擎(如SOLR)來搜索內容,並使用MySQL僅用於通過ID進行查找。

+0

我會做拿約翰什麼doe into $ name(0 =>'john',1 =>'doe') – clang1234 2010-08-18 18:35:17

+0

我無法在您的評論中回答這個問題,因爲我根本不瞭解PHP。我只是在處理MySQL組件。 – RHSeeger 2010-08-18 18:38:15

+0

explode(「」,「john doe」);會產生一個數組(0 =>「john」,1 =>「doe」) – 2010-08-18 19:17:22

0

在您的應用程序中,將搜索項分割到最後一個空格處,更改順序並在兩者之間添加逗號。

+0

如果用戶輸入「史酷比dooby」那會失敗,但留下了鬥 – clang1234 2010-08-18 18:17:11

0

我將首先解析搜索到可分詞「john」和「doe」,然後使用LIKE功能爲這兩個詞語編寫搜索。

編輯: 從下面一個答案回答你的問題...如何解析「李四」變成「約翰」和「李四」 我會寫一個MySQL存儲過程將它們分成包含的結果集「 John「和」Doe「,然後使用類似於該列的名稱

0

查看sql」like「運算符。例如

select * from TABLENAME 
where sort_name like '%doe' 

您需要做一些操作來搜索詞的應用端,並可能在您的SQL語句與其他類似條款提供其他條件子句。

0

對名字列全文索引,然後做到這一點,

​​