计算 live 的距离并按 asc|desc 顺序排列
calculate distance live and order asc|desc
所以当我启动网络应用程序时,服务器获取用户地理位置并将其保存为变量 (latitude/longitude)
我有一个数据库:ID、名称、纬度、经度
现在我想 select 数据库中的所有条目并按距离排序
我知道如何计算坐标之间的距离,但我不知道如何排序"live"
你们能告诉我如何解决这个问题吗?
你可以这样做
SELECT id,name,latitude,longitude, <Your_formula> distance from <table_name> order by distance
这是 sqlfiddle
您可以在 order by
子句
中简单地指定距离计算(例如,它的(经度 + 纬度)除以 42)
select ID, Name, Latitude, Longitude, (Longitude + Latitude) / 42 as Distance
from YourTable
order by (Longitude + Latitude) / 42
但是,由于距离计算可能比 (Longitude + Latitude) / 42 稍微复杂一些,您可能需要考虑根据结果集中列的序号对结果进行排序(我认为最数据库支持这一点)。所以像.....
select ID, Name, Latitude, Longitude, /* Insert Distance Calculation Here */ as Distance
from YourTable
order by 5 -- Column ordinals are 1-based
你应该注意到这种方法有一些陷阱。例如,如果更改列的顺序或添加列,则 order by
序号也必须更改,否则您将看到意想不到的结果。显然,如果您按字段名称或计算方式排序,这不是问题。
所以当我启动网络应用程序时,服务器获取用户地理位置并将其保存为变量 (latitude/longitude) 我有一个数据库:ID、名称、纬度、经度
现在我想 select 数据库中的所有条目并按距离排序
我知道如何计算坐标之间的距离,但我不知道如何排序"live"
你们能告诉我如何解决这个问题吗?
你可以这样做
SELECT id,name,latitude,longitude, <Your_formula> distance from <table_name> order by distance
这是 sqlfiddle
您可以在 order by
子句
select ID, Name, Latitude, Longitude, (Longitude + Latitude) / 42 as Distance
from YourTable
order by (Longitude + Latitude) / 42
但是,由于距离计算可能比 (Longitude + Latitude) / 42 稍微复杂一些,您可能需要考虑根据结果集中列的序号对结果进行排序(我认为最数据库支持这一点)。所以像.....
select ID, Name, Latitude, Longitude, /* Insert Distance Calculation Here */ as Distance
from YourTable
order by 5 -- Column ordinals are 1-based
你应该注意到这种方法有一些陷阱。例如,如果更改列的顺序或添加列,则 order by
序号也必须更改,否则您将看到意想不到的结果。显然,如果您按字段名称或计算方式排序,这不是问题。