2013-10-28 114 views
0

我有一個與列名爲CustomersFirstName, LastName, Email創建搜索查詢

讓我們假設我有客戶:約翰|威廉姆斯| [email protected]

現在怎麼辦我要創建我的查詢,這樣,如果我搜索:

"williams"  => match 
"will john"  => Match 
"will john 55" => NO match 
"will 1234"  => match 

我的查詢現在的樣子:

SELECT * FROM `Customers` WHERE `FirstName` LIKE _search_ OR `LastName` LIKE _search__ 

但是,如果有人在那裏尋找「將約翰」,那麼我的查詢將返回沒有匹配

+0

什麼是'_search_'?你沒有定義你想找到的東西 - 例子很好,但它們不能取代定義! – alfasin

+0

'_search_'是客戶正在尋找的任何東西。它可能是「威廉姆斯」或「將約翰」...我想寫一個查詢,它使我可以像你一樣搜索客戶在哪裏搜索手機上的聯繫人,例如 –

+0

我認爲這很清楚託諾之後。 – Strawberry

回答

1

好像你想要做這樣的事情:

select * from Customers where 
(FirstName like concat('%','john', '%') and LastName like concat('%','smith', '%')) 
or 
(LastName like concat('%','john', '%') and FirstName like concat('%','smith', '%')) 

的部分:johnsmith(查詢)是的不同部分搜索詞由空格分解並修改爲小寫(可以在代碼或數據庫中執行)。

鏈接Fiddle

0

動態SQL可以幫你

EXECUTE 'SELECT * FROM Customers WHERE FirstName LIKE ' || 
_search_ || ' OR LastName LIKE ' || _search__ || ';'; 

「_ search _」應該轉換爲文本(顯式或不顯式)。

當然,引用等待你的關注。

1

我想這樣的作品:

select * from Customers 
where (_search_ regexp '^[^ ]+ [^ ]+$' or _search_ regexp '^[^ ]+$') 
and (LastName like concat(substring_index(_search_, ' ', 1), '%')) 
or FirstName like concat(substring_index(_search_, ' ', -1), '%'))); 
0

粗製濫造......

SET @string = 'John|Williams|[email protected]'; 

SELECT IF(@string LIKE "%will%",IF(@string LIKE "%john%",IF(@string LIKE "%55%",1,0),0),0)x; 
+---+ 
| x | 
+---+ 
| 0 | 
+---+ 

SELECT IF(@string LIKE "%will%",IF(@string LIKE "%john%",IF(@string LIKE "%12%",1,0),0),0)x; 
+---+ 
| x | 
+---+ 
| 1 | 
+---+