标题可能有误导
问题详情:
根据地区(省,市,区 三个字段)查询自提点。
有的 区/市 是没有自提点的,所以只能以 or 来连接三个条件。
但是,这样感觉又会造成匹配不精确(同时符合三个字段的条目,不一定在最前面)
有什么解决方法么?
类似比如有这三条数据
id 省 市 区
1 A B C
2 A B D
3 A E F
查询的where子句为 省=A or 市=B or 区=D
这样三条数据都在结果里面
但是可能最精确的 id=2 的条目的排序不会在最前面
数据库都有内置函数(builtin)和流程控制逻辑; 这里你只需要使用if函数就可以实现了. 具体思路, 判断字段是否匹配到, 然后输出一个rank字段, 然后按照rank字段排序;
mysql> select id, if(name!=null, 0, 1) matched from tmp_table order by matched limit 10; | |
---|---|
id | matched |
522 | 1 |
542 | 1 |
543 | 1 |
544 | 1 |
545 | 1 |
546 | 1 |
547 | 1 |
550 | 1 |
600 | 1 |
601 | 1 |
10 rows in set (0.00 sec)
你可以尝试一下得到3个是否匹配的结果, 然后按照列的优先级排序数据;
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。