我试着按地点在“我”周围找点,这很简单:
select * from X where ((SQRT(POW(69.1 * (a.lat - 49.201441 ), 2) +
POW(69.1 * (16.161299 - a.lng) * COS(a.lat / 57.3), 2))) <='1') LIMIT 5
*
my location = 49.201441;16.161299
distance = 1 (mile)
此查询返回距离1英里的" me“周围的5个点。这太快了但就在我的桌子上有一个..。我不知道,大概5000行。
我在20万行表上使用这个查询,它非常慢!也许..。2-7秒,即使极限为1=无差别.
有人能给我解释一下并帮我吗?多谢各位!
顺便说一句:如果我的查询没有包含查询的这一部分,那么可能需要0.0008 s.因此,查询的第二部分是正确的。
发布于 2017-01-01 20:57:04
我用这个来找你身边的人。
表名: user_location
id,用户名,纬度,经度,经度
我不确定距离是否是一英里,但这样做是让用户从数据库中减去每一个人。如果用户lat和long在1以内,它将被放入结果中。
最大的问题是,1不等于1英里。它接近10英里,我相信(这是很久以前,可能不是10英里,我不记得了),但你可以随时改变这一点。另一个问题是,你基本上总是要更新人们的位置。这并没有那么糟糕,但是如果你有一个慢服务器和很多用户,它可以减慢你的速度。
它速度快而且有效..。不是最好的解决办法,但可能对你有用。对我来说,它至少显示了一个很好的周边地区。
$query = "SELECT * FROM `user_location` WHERE (".$user_lat." - latitude) <= 1 AND (".$user_lon." - longitude) <= 1 LIMIT 100";
我用10,000条线测试了这个,在我身边的254个人中,测试的时间还不到3秒。(随机生成的内容)
https://stackoverflow.com/questions/41418877
复制相似问题