2017-04-07 45 views
0

匹配的詞我有一個MySQL查詢,如:從我的自定義表如何使用REGEXP在MySQL從文本

SELECT name FROM table_name WHERE name LIKE '%custom%' limit 10 

這retruns我2行。

我想獲取包含文本c cu cus cust usto stom tom om m中任意一個詞的記錄。

我想下面的查詢:

SELECT name FROM table_name WHERE name like '%custom%' OR name REGEXP 'c|cu|cus|cust|usto|stom|tom|om|m' limit 10 

上面的查詢返回了我7分的記錄,但這些記錄7不具備這樣的2個記錄其第一次查詢結果有。

如何獲得?或者任何其他方式來獲得這些結果在MySQL?

編輯:在這裏我也想按第二個查詢中的最大子串匹配進行排序。

+0

查詢沒有問題。可以在這裏粘貼兩個查詢的輸出。 –

+0

你認爲'c'是一個單詞嗎? – revo

+0

是的,我的問題是一個例子,我想得到什麼樣的結果。我在我的web服務中動態地定製'custom',並返回與精確關鍵字及其子字符串匹配的記錄(這是關鍵字拼寫錯誤時的情況)。 –

回答

0

試試這個:

SELECT name FROM table_name WHERE name REGEXP 'custom' limit 10; 

沒有必要的LIKEREGEXP,但REGEXP較慢然後像。所以如果你的桌子有這麼多的記錄,那麼REGEXP quesries就會變慢。

+0

這個查詢返回與我第一個查詢相同的結果,意味着只有2條記錄,但我想要獲得總共9條記錄(從'name LIKE'%custom%''和匹配的'c | cu | cus | cust | usto | stom | tom | om | m') –

0

試試這個:

SELECT name FROM table_name WHERE name REGEXP 'custom|c|cu|cus|cust|usto|stom|tom|om|m' limit 10 

我們上面所做的是,我們與圖案的組合剩餘custom,我們讓他們都使用REGEXP

+0

不,仍然有7條記錄。 REGEXP是否區分大小寫?我的第一個查詢結果具有「自定義」而不是「自定義」。 –

+0

嘗試添加他們'自定義|定製',看看是否有任何區別 – Ibrahim

+0

我試過了,但結果相同。 –

0

您需要添加字邊界,這在MySQL中是[[:<:]]一個字的開始和[[:>:]]對單詞的末尾:

SELECT name 
FROM table_name 
WHERE name REGEXP '[[:<:]](c|cu|cus|cust|usto|stom|tom|om|m)[[:>:]]' 
limit 10 

live demo

請注意圍繞交替的括號。

+0

它返回空結果集。 –

+0

錯字 - 它錯過了一個冒號。現在試試。另請參閱演示。 – Bohemian