我有一个mysql查询,如:
SELECT name FROM table_name WHERE name LIKE '%custom%' limit 10
它从我的自定义表中重新排了两行。
我想获取包含文本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条记录没有第1条查询结果的2条记录。
如何获得?或者以其他方式将这些结果导入mysql?
编辑:在这里,我还希望通过第二次查询中的最大子串匹配进行排序。
答案 0 :(得分:0)
试试这个:
SELECT name FROM table_name WHERE name REGEXP 'custom' limit 10;
LIKE
不需要REGEXP
,但REGEXP
比LIKE慢。因此,如果您的表有这么多记录,那么REGEXP
问题就会变慢。
答案 1 :(得分:0)
试试这个:
SELECT name FROM table_name WHERE name REGEXP 'custom|c|cu|cus|cust|usto|stom|tom|om|m' limit 10
我们上面所做的是我们将custom
与其他模式结合起来,然后我们将它们全部用到REGEXP
。
答案 2 :(得分:0)
你需要添加单词边界,在MySQL中,[[:<:]]
用于单词的开头,[[:>:]]
用于单词的结尾:
SELECT name
FROM table_name
WHERE name REGEXP '[[:<:]](c|cu|cus|cust|usto|stom|tom|om|m)[[:>:]]'
limit 10
请参阅live demo。
请注意更改周围的括号。