2012-05-24 54 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