Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL-查找附近具有不同属性的位置?(地图API)_Mysql_Sql_Maps - Fatal编程技术网

Mysql SQL-查找附近具有不同属性的位置?(地图API)

Mysql SQL-查找附近具有不同属性的位置?(地图API),mysql,sql,maps,Mysql,Sql,Maps,我在MYSQL中有一个单独的表,其中包含位置信息(纬度和经度)的用户地址,每个用户可以有多个注册地址。我的目标是,当您搜索某个位置时,将列出距离该位置最近的所有用户 问题是,我无法进行区分,以便每个用户在SELECT中只列出一次。我更深入地搜索,发现小组可以解决这个问题。它确实通过防止重复来对用户进行分组,但是它不能保持最短距离的正确顺序 这个案例可以在地图文档中很容易看到,但是不做区分。 无分组的结果: ID_PLACE | ID_USER | NAME_USER | DISTANCE

我在MYSQL中有一个单独的表,其中包含位置信息(纬度和经度)的用户地址,每个用户可以有多个注册地址。我的目标是,当您搜索某个位置时,将列出距离该位置最近的所有用户

问题是,我无法进行区分,以便每个用户在SELECT中只列出一次。我更深入地搜索,发现小组可以解决这个问题。它确实通过防止重复来对用户进行分组,但是它不能保持最短距离的正确顺序

这个案例可以在地图文档中很容易看到,但是不做区分。

无分组的结果:

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加载数据。。。