Mysql SQL-查找附近具有不同属性的位置?(地图API)
我在MYSQL中有一个单独的表,其中包含位置信息(纬度和经度)的用户地址,每个用户可以有多个注册地址。我的目标是,当您搜索某个位置时,将列出距离该位置最近的所有用户 问题是,我无法进行区分,以便每个用户在SELECT中只列出一次。我更深入地搜索,发现小组可以解决这个问题。它确实通过防止重复来对用户进行分组,但是它不能保持最短距离的正确顺序 这个案例可以在地图文档中很容易看到,但是不做区分。 无分组的结果:Mysql SQL-查找附近具有不同属性的位置?(地图API),mysql,sql,maps,Mysql,Sql,Maps,我在MYSQL中有一个单独的表,其中包含位置信息(纬度和经度)的用户地址,每个用户可以有多个注册地址。我的目标是,当您搜索某个位置时,将列出距离该位置最近的所有用户 问题是,我无法进行区分,以便每个用户在SELECT中只列出一次。我更深入地搜索,发现小组可以解决这个问题。它确实通过防止重复来对用户进行分组,但是它不能保持最短距离的正确顺序 这个案例可以在地图文档中很容易看到,但是不做区分。 无分组的结果: ID_PLACE | ID_USER | NAME_USER | DISTANCE
ID_PLACE | ID_USER | NAME_USER | DISTANCE
2 1 MARIA 5
3 2 KEVIN 6
1 1 MARIA 8
4 2 KEVIN 10
ID_PLACE | ID_USER | NAME_USER | DISTANCE
1 1 MARIA 8
3 2 KEVIN 6
分组结果:
ID_PLACE | ID_USER | NAME_USER | DISTANCE
2 1 MARIA 5
3 2 KEVIN 6
1 1 MARIA 8
4 2 KEVIN 10
ID_PLACE | ID_USER | NAME_USER | DISTANCE
1 1 MARIA 8
3 2 KEVIN 6
什么时候应该
ID_PLACE | ID_USER | NAME_USER | DISTANCE
2 1 MARIA 5
3 2 KEVIN 6
使用GROUPBY时,按距离排序似乎被忽略,显然是按地点ID进行排序
我的选择是:
SELECT id, user_id,
(6371 *
Cos (radians (-30.053831))
* Cos (radians (lat))
* Cos (radians (lng) -radians (-51.191810))
+ Sin (radians (-30.053831))
* Sin (radians (lat))
)
) AS distance
FROM places
GROUP BY user_id
HAVING distance < 25
ORDER BY distance ASC;
SELECT id,user\u id,
(6371 *
Cos(弧度(-30.053831))
*Cos(弧度(纬度))
*Cos(弧度(液化天然气)-弧度(-51.191810))
+Sin(弧度(-30.053831))
*正弦(弧度(纬度))
)
)作为距离
从某处
按用户id分组
距离小于25的
按距离排序ASC;
尝试以下查询:
SELECT id,
user_id,
(6371 * Cos (radians (-30.053831)) * Cos (radians (lat)) * Cos (radians (lng) -radians (-51.191810)) + Sin (radians (-30.053831)) * Sin (radians (lat)) ) ) AS distance
FROM places
GROUP BY user_id
HAVING distance < 25
ORDER BY (6371 * Cos (radians (-30.053831)) * Cos (radians (lat)) * Cos (radians (lng) -radians (-51.191810)) + Sin (radians (-30.053831)) * Sin (radians (lat)) ) ASC;
选择id,
用户id,
(6371*Cos(弧度(-30.053831))*Cos(弧度(纬度))*Cos(弧度(lng)-弧度(-51.191810))+Sin(弧度(-30.053831))*Sin(弧度(纬度)))作为距离
从某处
按用户id分组
距离小于25的
订单号为(6371*Cos(弧度(-30.053831))*Cos(弧度(纬度))*Cos(弧度(lng)-弧度(-51.191810))+Sin(弧度(-30.053831))*Sin(弧度(纬度)))ASC;
它将继续以相同的方式提供。。。分组后,订单受损。显然,只列出了每个用户的第一条记录(PLACE_ID)。然后,您可以将整个查询保留在temp中,然后对距离进行排序,但加载数据需要时间,如按Functiona perfeitamente、porém não quero que os usuários se repitam加载数据。。。