利用mysql5.6 的st_distance 实现按照距离远近排序。

哈哈 阅读:973 2021-03-31 21:35:13 评论:0

一、用户需求

         1、显示我附近的小区。
         2、由近到远排序。
         3、显示距离


二、数据库表结构数据:

/* 
Navicat MySQL Data Transfer 
 
Source Server         : rdshme0env6yf2n829ympublic.mysql.rds.aliyuncs.com 
Source Server Version : 50629 
Source Host           : rdshme0env6yf2n829ympublic.mysql.rds.aliyuncs.com:3306 
Source Database       : wlsq_base 
 
Target Server Type    : MYSQL 
Target Server Version : 50629 
File Encoding         : 65001 
 
Date: 2016-12-13 19:12:51 
*/ 
 
SET FOREIGN_KEY_CHECKS=0; 
 
-- ---------------------------- 
-- Table structure for lt 
-- ---------------------------- 
DROP TABLE IF EXISTS `lt`; 
CREATE TABLE `lt` ( 
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', 
  `name` varchar(255) DEFAULT NULL COMMENT '名称', 
  `lng` double(10,3) DEFAULT NULL, 
  `lat` double(10,3) DEFAULT NULL, 
  PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; 
 
-- ---------------------------- 
-- Records of lt 
-- ---------------------------- 
INSERT INTO `lt` VALUES ('2', '宝安区美丽365花园		', '114.039', '22.669'); 
INSERT INTO `lt` VALUES ('3', '龙岗区佳兆业上品雅园', '114.089', '22.639'); 
INSERT INTO `lt` VALUES ('4', '龙岗区万科金色半山', '114.095', '22.634'); 
INSERT INTO `lt` VALUES ('5', '宝安区金港华庭', '113.868', '22.588'); 

三、功能实现

我当前所处在的位置(113.858202 , 22.583819 ),需要查询我附近10KM内的小区,并安装由近到远的顺序排列。
SELECT   
s.id,s.name,s.lng,s.lat,    
(st_distance (point (lng, lat),point(113.858202,22.583819) ) / 0.0111) AS distance   
FROM   
wlsq_base.lt s   
HAVING distance<10  
ORDER BY distance  

效果截图:


温馨提示:st_distance 函数,是mysql5.6版本才提供出来的相关功能函数。
标签:mysql
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号