Mysql or 连接多个字段的一点问题

发布于 2022-09-02 00:35:45 字数 346 浏览 18 评论 0

标题可能有误导

问题详情:

根据地区(省,市,区 三个字段)查询自提点。
有的 区/市 是没有自提点的,所以只能以 or 来连接三个条件。
但是,这样感觉又会造成匹配不精确(同时符合三个字段的条目,不一定在最前面)

有什么解决方法么?

类似比如有这三条数据
id 省 市 区
1 A B C
2 A B D
3 A E F
查询的where子句为 省=A or 市=B or 区=D
这样三条数据都在结果里面
但是可能最精确的 id=2 的条目的排序不会在最前面

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

§普罗旺斯的薰衣草 2022-09-09 00:35:45

数据库都有内置函数(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个是否匹配的结果, 然后按照列的优先级排序数据;

一绘本一梦想 2022-09-09 00:35:45

从sql执行逻辑来说,当执行器遇到多个or的时候应该是从前往后判断,如果前面判断为true后面就不会继续判断,这是很合理的逻辑,但是未找到文档支持。
你说的同时符合三个字段的条目,不一定在最前面不太明白是什么意思,sql查询结果的排序可以通过order by指定,最好不要依赖默认排序,鬼知道是按什么排序。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文