這是一種簡單但不是在同一時間。試圖縮短否則懶惰的查詢
我有一個用戶放入名稱的基本搜索框。 僅由first_name
和last_name
組成的名稱。 表有列first_name
,last_name
,display_name
其中firs_name
和last_name
顯然什麼姓和名,並display_name
是first_name
和last_name
無論是串聯還是首選名稱,以便William Smith
可能有Bill Smith
的顯示名稱。
的wackyness:
兩個姓和名可以是雙名。我的意思是,我們可能會像
First Name: Anna Maria Last Name: Smith
First Name: Anna Last Name: Bo Johnson
First Name: Anna Maria Last Name: Bo Johnson.
命名,那麼最好的情況下,一個名稱爲Anna Smith
,但我有足夠的最壞的情況Anna Maria Bo Johnson
不得不這樣做。
當Anna Maria Bo Johnson
用戶搜索我需要運行一個查詢,其中4個「字」是第一個或最後一個名字,而黯然雙第一雙姓氏有84個組合的類似Anna Bo Maria Johnson
這是不知道,還是Bo Maria Johnson Anna
等等......
現在我的問題是,我不希望我的MySQL查詢爲84線長是這樣的:(3個字的名字爲例)
SELECT * FROM tablename a
WHERE
(a.first_name = '$search_term[0]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[0]' AND a.last_name = '$search_term[2]') OR
(a.first_name = '$search_term[0]' AND a.last_name = '$search_term[1] $search_term[2]') OR
(a.first_name = '$search_term[0]' AND a.last_name = '$search_term[2] $search_term[1]') OR
(a.first_name = '$search_term[1]' AND a.last_name = '$search_term[0]') OR
(a.first_name = '$search_term[1]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[1]' AND a.last_name = '$search_term[0] $search_term[2]') OR
(a.first_name = '$search_term[1]' AND a.last_name = '$search_term[2] $search_term[0]') OR
(a.first_name = '$search_term[2]' AND a.last_name = '$search_term[0]') OR
(a.first_name = '$search_term[2]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[2]' AND a.last_name = '$search_term[0] $search_term[1]') OR
(a.first_name = '$search_term[2]' AND a.last_name = '$search_term[1] $search_term[0]') OR
(a.first_name = '$search_term[0] $search_term[1]' AND a.last_name = '$search_term[2]') OR
(a.first_name = '$search_term[1] $search_term[0]' AND a.last_name = '$search_term[2]') OR
(a.first_name = '$search_term[0] $search_term[2]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[2] $search_term[0]' AND a.last_name = '$search_term[1]') OR
(a.first_name = '$search_term[1] $search_term[2]' AND a.last_name = '$search_term[0]') OR
(a.first_name = '$search_term[2] $search_term[1]' AND a.last_name = '$search_term[0]') OR
a.display_name = '$search_term[0] $search_term[1] $search_term[2]' OR
a.display_name = '$search_term[1] $search_term[2] $search_term[0]' OR
a.display_name = '$search_term[2] $search_term[1] $search_term[0]'
ORDER BY last_name, first_name ASC
那麼,什麼將是一個不錯的快速,更高效寫出這個查詢的方式。基本上我需要比較(=)每個單詞與隨機單個單詞中的所有字段或兩個字組合組。
感謝您提前提供任何幫助!
In情況並不明顯$ search_term []是通過使用explode()分割搜索詞「Anna Maria Bo Johnson」創建的一個數組(可能是) – ipixel
您可以使用'LIKE'運算符(http://www.w3schools.com /sql/sql_like.asp),但你會得到多個結果。搜索的重點是否只提供一個結果? –
我有一個單獨的查詢,它使用LIKE和AND NOT FIELD IN(SELECT字段FROM ...),除了「確切」搜索結果,它給了我一切。 – ipixel