gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:51:43 25 4
gpt4 key购买 nike

我有 3 个表。

表 1 - 驱动程序

Table 1 - drivers

表 2 - 位置

Table 2 - location

表 3 - 距离

enter image description here

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

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

最佳答案

这不是直截了当的。

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

与位置本身的距离为零。我得到了 UNION ALL 的帮助为了列出 <locationid,distance> .

然后制作一个INNER JOIN在上面的列表和你的 drivers 之间匹配表location .

最后根据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

See Rextester Demo

See SQL Fiddle Demo


注意:您可以包括 LIMIT n为了限制结果集最多包含 top n搜索结果。

您还可以包含 ..WHERE distance < MAX_ALLOWABLE_DISTANCE...在您的查询中,以便最终结果具有某种意义。

关于mysql - 从给定位置的最近位置查找驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40067616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com