首页 / MYSQL / MySQL选择匹配字符串的最大长度
MySQL选择匹配字符串的最大长度
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL选择匹配字符串的最大长度,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2246字,纯文字阅读大概需要4分钟。
内容图文
我需要返回所有文本结果(如果有的话),它们共享搜索字符串共有的有限子字符串的最大长度.
给定在包含的表列中搜索“StackOverflow”
"Stack",
"Sta",
"StackOv",
"StackOverthrow",
"StackOverSlow",
"StackFlow",
"Soverflow",
"StackOverCrow",
"StackOverSlow",
etc.
查询将返回“StackOverthrow”,因为它包含最大数量的匹配字符,以及独特结果集中的StackOverSlow和StackOverCrow.
目前我正在做一些效率低下的事情,首先是LIKE搜索第一个字符并继续重复和扩展搜索字符串,直到找不到任何内容,并保持最后的好结果.
即
select names from table where name like 'XX%';
"S" ->Results
"St"->Results
. .
"StackOver"->Results
"StackOverf"-> No results (Last result returning items beginning with StackOver etc as being the correct answer)
我知道这种方法效率极低,任何人都可以提供单一查询来实现这一结果吗?我知道我可以一次搜索所有组合并过滤代码中最长的结果,但是,我认为DB应该更好.
Edit1:注意上面的例子有点简化. DB中的绝大多数数据在2到10个字符之间,最常见的匹配长度约为3个字符.表中有超过100K的记录.
编辑2:道歉,我需要澄清可能有多个正确的结果,并且结果可能包含需要删除的重复项.目前使用我的低效方法选择distinct很容易.
解决方法:
使用名称索引,以下应该是非常高性能:
SELECT DISTINCT name
FROM myTable
WHERE name LIKE CASE
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'S%') THEN '%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'St%') THEN 'S%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'Sta%') THEN 'St%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'Stac%') THEN 'Sta%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'Stack%') THEN 'Stac%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackO%') THEN 'Stack%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOv%') THEN 'StackO%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOve%') THEN 'StackOv%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOver%') THEN 'StackOve%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOverf%') THEN 'StackOver%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOverfl%') THEN 'StackOverf%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOverflo%') THEN 'StackOverfl%'
WHEN NOT EXISTS(SELECT * FROM myTable WHERE name LIKE 'StackOverflow%') THEN 'StackOverflo%'
ELSE 'StackOverflow%'
END
在sqlfiddle上看到它.
内容总结
以上是互联网集市为您收集整理的MySQL选择匹配字符串的最大长度全部内容,希望文章能够帮你解决MySQL选择匹配字符串的最大长度所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。