私は次のテーブルと関係を持っています:
Players:
foreign_key to User
Users:
foreign_key to City
Cities:
latitude (float)
longitude (float)
ユーザーに関連付けられているすべての教授を特定の都市またはnear_by都市から取得しようとしています。
このクエリを使用すると、特定の緯度と経度が指定されたnear_by(20km)の都市と、指定された都市の緯度と経度までの距離が返されます。この場合latitude = 41.353312 and longitude = 1.976252
:
SELECT cities.*,
6371 *
acos(cos(radians(41.353312)) *
cos(radians(cities.latitude)) *
cos(radians(cities.longitude) - radians(1.976252)) +
sin(radians(41.353312))*sin(radians(cities.latitude)))
AS km_away FROM `cities` GROUP BY km_away ASC HAVING km_away <= 20
そして、このクエリ(機能しません)を試しました。これにより、ユーザーの都市が指定された都市(緯度と経度)の近くにあるプレーヤーを返すことができます。
SELECT COUNT(*)
FROM `players`
INNER JOIN `users`
ON `users`.`id` = `players`.`user_id`
INNER JOIN `cities`
ON `cities`.`id` = `users`.`city_id`
WHERE
(
cities.id IN
(SELECT cities.*,
6371 *
acos(cos(radians(41.353312)) *
cos(radians(cities.latitude)) *
cos(radians(cities.longitude) - radians(1.976252)) +
sin(radians(41.353312))*sin(radians(cities.latitude))) AS km_away
FROM `cities`
GROUP BY km_away ASC
HAVING km_away <= 20)
)
私もしたい:
1-関連するユーザー都市から特定の都市までの距離順にプレーヤーを並べ替えます。
2-返された各レコードの距離(値)を取得します。