2017-04-07 56 views
0

匹配的词我有一个MySQL查询,如:从我的自定义表如何使用REGEXP在MySQL从文本

SELECT name FROM table_name WHERE name LIKE '%custom%' limit 10 

这retruns我2行。

我想获取包含文本c cu cus cust usto stom tom om m中任意一个词的记录。

我想下面的查询:

SELECT name FROM table_name WHERE name like '%custom%' OR name REGEXP 'c|cu|cus|cust|usto|stom|tom|om|m' limit 10 

上面的查询返回了我7分的记录,但这些记录7不具备这样的2个记录其第一次查询结果有。

如何获得?或者任何其他方式来获得这些结果在MySQL?

编辑:在这里我也想按第二个查询中的最大子串匹配进行排序。

+0

查询没有问题。可以在这里粘贴两个查询的输出。 –

+0

你认为'c'是一个单词吗? – revo

+0

是的,我的问题是一个例子,我想得到什么样的结果。我在我的web服务中动态地定制'custom',并返回与精确关键字及其子字符串匹配的记录(这是关键字拼写错误时的情况)。 –

回答

0

试试这个:

SELECT name FROM table_name WHERE name REGEXP 'custom' limit 10; 

没有必要的LIKEREGEXP,但REGEXP较慢然后像。所以如果你的桌子有这么多的记录,那么REGEXP quesries就会变慢。

+0

这个查询返回与我第一个查询相同的结果,意味着只有2条记录,但我想要获得总共9条记录(从'name LIKE'%custom%''和匹配的'c | cu | cus | cust | usto | stom | tom | om | m') –

0

试试这个:

SELECT name FROM table_name WHERE name REGEXP 'custom|c|cu|cus|cust|usto|stom|tom|om|m' limit 10 

我们上面所做的是,我们与图案的组合剩余custom,我们让他们都使用REGEXP

+0

不,仍然有7条记录。 REGEXP是否区分大小写?我的第一个查询结果具有“自定义”而不是“自定义”。 –

+0

尝试添加他们'自定义|定制',看看是否有任何区别 – Ibrahim

+0

我试过了,但结果相同。 –

0

您需要添加字边界,这在MySQL中是[[:<:]]一个字的开始和[[:>:]]对单词的末尾:

SELECT name 
FROM table_name 
WHERE name REGEXP '[[:<:]](c|cu|cus|cust|usto|stom|tom|om|m)[[:>:]]' 
limit 10 

live demo

请注意围绕交替的括号。

+0

它返回空结果集。 –

+0

错字 - 它错过了一个冒号。现在试试。另请参阅演示。 – Bohemian