我有一个活动数据库,每个活动都可以在3天内举行,每天包含一个邮政编码。
因此,数据库看起来像这样(+很多其他字段)。
在另一个数据库中,我有地理位置信息(邮政编码、纬度、经度)。
现在用户可以输入他们的邮政编码和半径,距离该点半径内的所有活动将显示出来。
问题:
1-完成这项任务的最佳方法是什么?
解决方案:
创建所有可能邮政编码的视图,并将其与Geo表连接以获取其Lat/Lng
当用户搜索邮政编码时,获取Lat/Lng并执行数学运算以获得靠近该点的所有邮政编码。
但是,从性能的角度来看,我认为这不是一个好的方式,因为我需要在3000多个活动上应用查询。
找到的计算距离的代码:
找到MySQL中附近的位置(Haversine公式)
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
你们觉得呢?
因此,数据库看起来像这样(+很多其他字段)。
在另一个数据库中,我有地理位置信息(邮政编码、纬度、经度)。
现在用户可以输入他们的邮政编码和半径,距离该点半径内的所有活动将显示出来。
问题:
1-完成这项任务的最佳方法是什么?
解决方案:
创建所有可能邮政编码的视图,并将其与Geo表连接以获取其Lat/Lng
当用户搜索邮政编码时,获取Lat/Lng并执行数学运算以获得靠近该点的所有邮政编码。
但是,从性能的角度来看,我认为这不是一个好的方式,因为我需要在3000多个活动上应用查询。
找到的计算距离的代码:
找到MySQL中附近的位置(Haversine公式)
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
你们觉得呢?