SQL 语句:select location.* from (select *,round(6378.138*2*asin(sqrt(pow(sin( (36.668530*pi()/180-px_lat*pi()/180)/2),2)+cos(36.668530*pi()/180)*cos(px_lat*pi()/180)* pow(sin( (117.020359*pi()/180-px_lon*pi()/180)/2),2)))*1000) as distance from bsx_tra
有业务需求如下: select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7); 这里直入主题,用TP的order方法写的话,可能不太好写,但是也可以写成这样 ->order("field(id,3,6,9,1,2,5,8,7)") 但是官方文档说了,当你的order排序中使用了SQL函数的时候,请使用orderRaw方法替代order 所以并不太好实现. 所以查阅资料找到
一.MySql不使用空间函数,简单版 1.粗算,根据场景得到一个range,计算经纬度,得到的是一个矩形区域(A),不精确,但是已经有范围这个雏形了,最容易实现的方式之一. 1 2 3 4 5 6 where latitude>y-range and latitude<y+range and longitude>x-range and longitude <x+range order by abs(longitude -x)+abs(latitude -y) limit 10;
#.两点距离(1.4142135623730951) ,),point(,)); ORDER BY distance; mysql 5.6 添加 #.两点球面距离(.0357231545m) ,),point(,)) ORDER BY distance; ORDER BY distance; This . 第一个函数是计算平面坐标系下,两点的距离,就是 如果用于计算地球两点的距离,带入的参数是角度(经纬度),则计算的单位也是相差的角度,用此角度计算距离不准.纬度距离约111km每度,经度距离在赤
SELECT id,lng,lat,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((lat1*PI()/180-lat*PI()/180)/2),2)+COS(lat1*PI()/180)*COS(lat*PI()/180)*POW(SIN((lng1*PI()/180-lng*PI()/180)/2),2)))*1000)AS juliFROM address having juli > 500ORDER BY juli AscLIMIT 100lng1为自定义的经度l
网上给出的计算公式是这样的: Lng1表示A点纬度和经度,Lat2 Lng2 表示B点纬度和经度 a = Lat1 – Lat2为两点纬度之差 b = Lng1 -Lng2 为两点经度之差 6378.137为地球半径,单位为公里 计算出来的结果单位为公里 ),)))),)))) as juli from `area` ,