使用MySQL中的REGEXP以随机顺序匹配搜索引擎的关键字

时间:2011-04-18 01:01:13

标签: mysql regex random expression

我正在尝试使用正则表达式将用户输入的搜索字符串与MySQL数据库中条目的标题进行匹配。

例如,我在数据库中的表中有以下行:

id   title
1    IM2 - Article 3 Funky Business
2    IM2 - Article 4 There's no Business That's not Show Business
3    IM2 - There's no Business That's not Show Business
4    CO4 - Life's a business

当用户搜索“IM Article Business”时,将执行以下查询(使用str_replace将空格替换为“(。*)”):

SELECT * FROM mytable WHERE title REGEXP 'IM(.*)Article(.*)Business'

这将返回前两行。

现在,我希望它在用户使用相同的单词时显示相同的结果,但是在另一个顺序中,例如:“Business IM Article”。结果必须包含输入的所有单词,只有输入单词的顺序无关紧要。

我无法弄清楚如何以任何方式做到这一点,并希望正则表达式将成为答案。我以前从未使用过它们,所以有人知道怎么做吗?

谢谢,
帕斯卡

1 个答案:

答案 0 :(得分:4)

这不是正则表达式擅长的。幸运的是,这是SQL非常擅长的东西。 (我将不使用mysql的regexp关键字,我甚至不知道它存在,而是使用SQL标准“%”glob匹配。)

select * from mytable where title like '%IM%' and title like '%Article%' and title like '%Business%'

现在title必须包含所有三个字符串,但您尚未指定订单。正是你想要的。