shenjinpeng
252 天前
推荐改用 es 查, 附带搜索一起搞了
PS: 贴一下 MySql 代码
```PHP
// 6371000 地球半径, 距离查询
// 可以当作子查询字段排序,先计算距离再排序
$distance = "ROUND( 6371000 * 2 * ASIN(SQRT( POW(SIN(({$lat} * PI() / 180 - latitude * PI() / 180) / 2),2) + COS({$lat} * PI() / 180) * COS(latitude * PI() / 180) * POW(SIN(({$lng} * PI() / 180 - longitude * PI() / 180) / 2),2))) ) AS distance";
```
```mysql
-- 自己实现的 mysql 函数
CREATE DEFINER=`root`@`%` FUNCTION `calcStoreDistance`(lat double, lng double,latitude double,longitude double) RETURNS int(11)
BEGIN
RETURN ROUND(
12742000 * ASIN(SQRT(
POW(SIN((lat * PI() / 180 - latitude * PI() / 180) / 2),2) +
COS(lat * PI() / 180) *
COS(latitude * PI() / 180) *
POW(SIN((lng * PI() / 180 - longitude * PI() / 180) / 2),2)
)));
END
-- 使用 SELECT *,calcStoreDistance(25.028317,102.678467,store.latitude,store.longitude) as distance FROM `store` order by distance;
```
```mysql
-- 直接用 mysql 自带函数
ROUND(st_distance_sphere(point($lng,$lat),geo)) as distance
```