MySql正则表达式选择列在存储过程中匹配(动态)多个值

时间:2010-10-01 09:58:01

标签: sql mysql regex sql-function

我正在尝试生成一个查询,我想选择匹配多个值的列(文本)。

例如:我有两列,id和description。假设我的第一行包含值为

的描述列
  

Google是网站,非常棒   搜索引擎

,第二行,描述列值

  

亚马逊网站是一个很棒的电子商务   存储

我创建了一个查询

  

从table_name中选择*   说明REGEXP'网站\ |   搜索“

它返回两行,即谷歌和亚马逊,但我想只返回谷歌,因为我希望这些行同时包含网站搜索这两个词要匹配的单词数也不固定,基本上我创建的查询用于搜索下拉,

所有传递的单词都应该出现在列中,列中出现的单词的顺序并不重要。如果除了使用正则表达式之外还有其他更好的选择,请指出。

编辑:传递的单词数是动态的并且未知,用户可以传递要与列匹配的其他单词。我将在存储过程中使用查询

1 个答案:

答案 0 :(得分:1)

从性能的角度来看,真的不认为正则表达式解决方案对你有好处。认为你应该寻找全文搜索。

具体而言,您需要在表定义中使用类似的内容创建全文索引:

create table testTable
(
Id int auto_increment not null,
TextCol varchar(500)
fulltext(TextCol)
); 

然后您的查询变得更容易:

select * from testTable where Match(TextCol) against ('web') 
AND Match(TextCol) against ('server')

强烈建议您阅读有关FULLTEXT匹配的MySQL文档,并且有许多小技巧和功能在此任务中有用(包括运行上述查询的更有效方法)

编辑:也许布尔模式可以帮助您找到这样一个简单的解决方案:

Match(textCol) against ('web+ Server+' in boolean mode)

你所要做的就是构建反对字符串,所以我认为这可以在没有动态SQL的SP中完成