これは簡単ではありません。
まず、特定の場所に関係のあるすべての場所を取得する必要があります。この結果にはlocationid
とdistance
が含まれています。
場所自体との距離はゼロです。私は<locationid,distance>
のリストを作るためにUNION ALL
の助けを借りてきました。
次に、上記のリストとdrivers
の表の間にINNER JOIN
を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
OR
See SQL Fiddle Demo
注:あなたは最も上部に含む結果セットを制限するためにLIMIT n
を含むことができ検索結果
最終結果が意味をなさないように、..WHERE distance < MAX_ALLOWABLE_DISTANCE...
をクエリに含めることもできます。
そのような質問を書いてください。楽しさと喜びのように聞こえる。 – Drew
実際には、距離はダッカの「時間」によって測定されます。 (:p)。あなたが試したことを示すとともに、サンプル入力に基づいて期待される結果を共有してください。 – 1000111
ハハハ!はい。そのとおり。 :p –