我有一个mysql查询,类似于:
SELECT name FROM table_name WHERE name LIKE '%custom%' limit 10它从我的自定义表中返回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中获得这些结果的方法?
编辑:在这里,我还希望在第二个查询中按最大子字符串匹配排序。
发布于 2017-04-07 05:29:25
试试这个:
SELECT name FROM table_name WHERE name REGEXP 'custom' limit 10;不需要LIKE和REGEXP,但是REGEXP比喜欢慢。因此,如果您的表有那么多记录,那么REGEXP问题就会慢一些。
发布于 2017-04-07 05:33:54
试试这个:
SELECT name FROM table_name WHERE name REGEXP 'custom|c|cu|cus|cust|usto|stom|tom|om|m' limit 10我们上面所做的是将custom与其他模式结合起来,并使它们都使用REGEXP。
发布于 2017-04-07 05:38:43
您需要添加单词边界,在MySQL中,单词的开头是[[:<:]],词尾是[[:>:]]:
SELECT name
FROM table_name
WHERE name REGEXP '[[:<:]](c|cu|cus|cust|usto|stom|tom|om|m)[[:>:]]'
limit 10见现场演示。
注意交替前后的括号。
https://stackoverflow.com/questions/43270263
复制相似问题