mysql - 如何找到与全部或部分输入完全匹配的字符串
问题描述
我想编写一个查询来搜索包含数百万条记录的表,以查找仅从一开始就与搜索字符串或其子字符串完全且最佳匹配的值。性能是最重要的。
这就像一个相反的:
SELECT * FROM table_name WHERE column_name LIKE '$input%' LIMIT 1
例如,我想在下表中搜索foobar。如果foobar不存在,则搜索fooba直到最后一个字符f并返回完全匹配的行。
+------------------+
| column_name |
+------------------+
| foobar |
+------------------+
| fooba |
+------------------+
| foob |
+------------------+
| foo |
+------------------+
| fo |
+------------------+
| foobarrrrr |
+------------------+
| foooooooooooo |
+------------------+
| barfoo |
+------------------+
解决方案
您可以使用列值LIKE
动态构造模式。
SELECT column_name
FROM table_name
WHERE 'foobar' LIKE CONCAT(column_name, '%')
ORDER BY LENGTH(column_name) DESC
LIMIT 1
请注意,如果表很大,这会很慢,因为我认为它不能使用索引。如果这是一个问题,动态构建查询会更好。
推荐阅读
- java - @DataJpaTest 不能排除反应性 mongo 的存储库
- c# - 使用自动映射器映射对象的问题
- javascript - 如何计算 jalali 日历中的闰年?
- python - 用于类型生成函数的 Python3 类型注释
- reactjs - y 轴上的 react-chart-js-2 单位
- java - java.lang.NullPointerException 运行 cucumber+maven 测试
- javascript - 在客户端读取提要时出现 NotAllowedException
- c# - Unity Json 无法序列化通用列表
- python - Django在代理模型中保存默认值
- python-3.x - Python根据条件将列表转换为嵌套列表