从给定位置的最近位置查找驱动程序

时间:2016-10-16 06:39:20

标签: mysql sql

我有3张桌子。

表1 - 驱动程序

Table 1 - drivers

表2 - 位置

Table 2 - location

表3 - 距离

enter image description here

用户将搜索与位置匹配的驱动程序。在驱动程序表中,该位置指的是驱动程序的当前位置。如果某个驱动程序在特定位置不可用,我想要一个查询来搜索最接近用户所提供位置的驱动程序。

表2是位置名称,表3是从一个地方到另一个地方的距离。但问题是,如果存储了从locationid 1到locationid 2的距离,则不存在相反的版本(locationid 2到locationid 1)。

1 个答案:

答案 0 :(得分:3)

这不是直截了当的。

首先,您需要获取给定位置与之关系的所有位置。此结果包含locationiddistance

与位置本身的距离为零。我已获得UNION ALL的帮助,以便列出<locationid,distance>

然后在上面的列表和匹配INNER JOIN的{​​{1}}表格之间设置drivers

最后按升序对location的结果集进行排序。

distance

See Rextester Demo

OR

See SQL Fiddle Demo

注意:您可以加入SELECT * FROM drivers DR INNER JOIN ( SELECT locationid, 0 AS distance FROM location WHERE locationname = 'Gulshan' UNION ALL SELECT IF(L.locationid = D.fromid, D.toid, D.fromid), D.distance FROM location L INNER JOIN distance D ON L.locationid IN (D.fromid,D.toid) WHERE locationname = 'Gulshan' ) AS t ON DR.location = t.locationid ORDER BY t.distance ,以限制包含最多LIMIT n个搜索结果的结果集。

您还可以在查询中加入n,以便最终结果具有某种意义。