gpt4 book ai didi

MySQL——按子字符串匹配索引排序

转载 作者:行者123 更新时间:2023-11-29 12:19:29 25 4
gpt4 key购买 nike

我有一个包含公司(id,名称)的表。在我必须针对用“like”处理的记录搜索输入查询之前。有时客户希望它以输入查询结束,有时它可能发生在它应该以输入查询开始的某个时间之间。所以我使用了“like”的不同变体

输入查询:Micro

select * from Company where CompanyName like "Micro%";
select * from Company where CompanyName like "%Micro%";
select * from Company where CompanyName like "%Micro";

很简单吧。现在变化开始出现,用“喜欢”来处理并不那么容易。就像发生在单词开头搜索查询的一种情况一样。与上面的输入查询一样,结果集应包含

Microcompany Something
Something Somethin Microcompany
Something Microcompany

所以我改用 Regular Expressions

现在我的查询变成了

select * from company where CompanyName regexp '[[:<:]]Micro';

问题:现在我希望按照最接近的匹配索引对结果进行排序。我的意思是索引接近 0 的匹配发生的匹配将首先出现,然后是其他匹配。对于上述搜索结果,其顺序应如下。

Microcompany Something
Something Microcompany
Something Somethin Microcompany

是否可以通过MySQL实现。如果是的话怎么办?还有什么替代方案?

最佳答案

虽然可能存在以下情况不起作用的异常(exception)情况,但对于大多数情况来说它可能已经足够了:

select *
from company
where CompanyName regexp '[[:<:]]Micro'
order by instr( CompanyName, 'Micro');

也就是说,仅匹配名称中以“Micro”开头的名称。然后按照“Micro”距离单词前面的距离的顺序返回它们。我怀疑有很多名字中都有两次“Micro”——如果确实如此,那么每次出现都很有可能以一个单词开头。

关于MySQL——按子字符串匹配索引排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29252314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com