2

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

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

谷歌是一个网站和一个很棒的搜索引擎

,第二行带有描述列值

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

我创建了一个查询

Select * from table_name where description REGEXP 'Website \| 搜索'

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

所有通过的单词都应该出现在列中,出现在列中的单词的顺序并不重要。如果除了使用 regex 之外还有其他更好的选择,请指出。

编辑:传递的字数是动态的且未知的,用户可以传递额外的字以匹配列。我将在存储过程中使用查询

4

1 回答 1

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 中完成

于 2010-10-01T11:09:50.757 回答