2012-05-24 52 views
3

我有以下MySQL查詢:的MySQL REGEXP使用/反對

SELECT標題,說明FROM some_table WHERE MATCH(標題,說明) AGAINST('+丹佛(REGEXP「[[:<:] ] colorado [s] * [[:>:]]「)'BOOLEAN MODE);

的「正則表達式」在這裏尋找一個「完整的單詞」科羅拉多(有或沒有結束的「S」)。

我想實際僅選擇有(「掘金」)AND(「科羅拉多州」或「科羅拉多」)的行。但我不能爲REGEXP輸入「+」。我試過但得到了0個結果,儘管表中有符合要求的行。

我如何能得到「+」,以對抗內使用REGEXP工作任何想法? 我正在從一個PHP腳本構造這個,其中「丹佛」和「科羅拉多」是我用來構造select語句的變量的值。

我的PHP/MySQL的腳本看起來有點像這樣:

SELECT標題,描述從some_table WHERE MATCH(標題,描述) AGAINST('+ $ VAR1(REGEXP「[[:<:] $ var2 [s] * [[:>:]]「)'BOOLEAN MODE);

回答

3

我不認爲這是可能的正則表達式和MATCH ......在布爾模式結合起來。您需要使用語法來編寫布爾表達式。

嘗試是這樣的:

SELECT title, description 
FROM some_table 
WHERE MATCH (title,description) 
     AGAINST ('+denver +(colorado colorados)' IN BOOLEAN MODE); 
+0

感謝馬克。但是,這也會帶來「丹佛abcolorado」甚至「丹佛無論123colorado890」行。我的要求是隻挑選$ var2及其複數中的完整單詞。我可能需要在PHP中構建該查詢。請讓我知道你是否有其他想法?再次感謝。 – Sameer

+1

@Sameer:你確定嗎?你測試過了嗎?看到這個小提琴:http://sqlfiddle.com/#!2/d971f/1 –

+0

令人驚歎!老實說,沒有嘗試過,認爲它會拿起其他行。我承認我還有很多要學習!感謝一堆馬克! – Sameer