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

Mysql 从给定位置的最近位置查找驱动程序,mysql,sql,Mysql,Sql,我有三张桌子 表1-驱动因素 表2-位置 表3-距离 用户将搜索与位置匹配的驱动程序。在驱动程序表中,位置指驱动程序的当前位置。如果某个特定位置没有可用的驱动程序,我需要一个查询来搜索与用户提供的位置最近的驱动程序 表2是位置名称,表3是从一个地方到另一个地方的距离。但问题是,如果存储了从locationid 1到locationid 2的距离,则相反的版本不是(locationid 2到locationid 1)。这不是直接的 首先,您需要获取给定位置与之有关系的所有位置。此结果包括lo

我有三张桌子

表1-驱动因素

表2-位置

表3-距离

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


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

这不是直接的

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

与位置本身的距离为零。我已经得到了
联合所有人的帮助,以便列出

然后在上面的列表和您的
驱动程序
表之间进行
内部联接,以匹配
位置

最后根据距离对结果集进行升序排序

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
,以限制最多包含top
n
搜索结果的结果集


您还可以在查询中包含一个
。其中距离
,以便最终结果具有某种意义。

因此编写该查询。听起来很有趣。在实践中,距离是用达卡的时间来衡量的。(:p)。请展示您尝试过的内容,并根据一些示例输入分享您的预期输出。哈哈哈!对是的许多事情需要澄清。您如何识别可用的驱动程序?您的预期结果集是否最多包含一个条目?用户使用什么进行搜索?用户是否使用
Mirpur
之类的文本进行搜索?使用示例数据共享表的脚本。非常感谢。回答得好!