mysql - 在 MySQL 查询中获得最佳匹配
问题描述
我想从 MySQL 查询中获取结果,按最佳匹配排序。这意味着当我这样的表时:
+--------+
| Field |
+--------+
| X01234 |
| 001234 |
| 01234 |
| XT1234 |
+--------+
并且想要搜索$str='012'
,所需的输出应该是
01234
001234
X01234
为此,我发现的唯一方法是使用此 UNION 查询:
SELECT * FROM my_table WHERE field LIKE '$str%'
UNION
SELECT * FROM my_table WHERE field LIKE '%$str%'
有没有更好的方法为搜索的字符串选择最佳匹配?
解决方案
也许这就是你想要的
SELECT *
FROM my_table
WHERE field LIKE '%$str%'
ORDER BY INSTR(field,'$str'),field
你也可以INSTR
改用LIKE
SELECT *
FROM my_table
WHERE INSTR(field,'$str')>0
ORDER BY INSTR(field,'$str'),field
SQL 小提琴 - http://www.sqlfiddle.com/#!9/d3b410/1
推荐阅读
- c# - 为什么在使用 Task 时使用 F5 和 Ctrl+F5 运行 WindowsForm App 会导致不同的行为?
- python - 如何在python中使用ffmpeg合并音频和视频文件?
- ios - 是否有设置表格视图的部分标题以使标题不为大写的功能?
- neural-network - 二进制序列数据的神经网络架构
- java - lock.notify() 是否仅在线程中的循环结束时执行
- angular - NGRX - updateMany 删除密钥
- ios - Alamofire)我想要处理总是新的请求
- lua - Premake,命令行选项不做任何事情
- c - 进程使用 sigint_handler 捕获 SIGINT 信号
- reactjs - 如何仅在第一次渲染childComponent时跳过childComponent中getDerivedStatefromProps()中的状态更新