首页 > 解决方案 > 如何找到与全部或部分输入完全匹配的字符串

问题描述

我想编写一个查询来搜索包含数百万条记录的表,以查找仅从一开始就与搜索字符串或其子字符串完全且最佳匹配的值。性能是最重要的。

这就像一个相反的:

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        |
+------------------+

标签: mysqlsql

解决方案


您可以使用列值LIKE动态构造模式。

SELECT column_name
FROM table_name
WHERE 'foobar' LIKE CONCAT(column_name, '%')
ORDER BY LENGTH(column_name) DESC
LIMIT 1

请注意,如果表很大,这会很慢,因为我认为它不能使用索引。如果这是一个问题,动态构建查询会更好。


推荐阅读