mysql查询附近所有数据

而在实际的使用中,不太可能会发生需要计算该用户与所有其他用户的距离,然后再排序的情况,当用户数量达到一个级别时,就可以在一个较小的范围里进行搜索,而非在所有用户中进行搜索. 我使用了4个where条件,只对于经度和纬度大于或小于该用户1度(111公里)范围内的用户进行距离计算,同时对数据表中的经度和纬度两个列增加了索引来优化where语句执行时的速度.

$Website=纬度  $WechatNo=经度  查询10条数据

[php]select * from htx_user where Website > ".$Website."-1 and Website < ".$Website."+1 and WechatNo > ".$WechatNo."-1 and WechatNo < ".$WechatNo."+1 order by ACOS(SIN((".$Website." * 3.1415) / 180 ) *SIN((Website * 3.1415) / 180 ) +COS((".$Website." * 3.1415) / 180 ) * COS((Website * 3.1415) / 180 ) *COS((".$WechatNo."* 3.1415) / 180 – (WechatNo * 3.1415) / 180 ) ) * 6380 asc limit 10[/php]

根据用户经纬度查询出附近数据

[php]

SELECT storesName,jingDu,weiDu,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((62.72441*PI()/180-weiDu*PI()/180)/2),2)+COS(62.72441*PI()/180)*COS(weiDu*PI()/180)*POW(SIN(107.159108*PI()/180-jingDu*PI()/180)/2,2)))*1000) AS dis,address FROM skt_stores WHERE dataFlag=1 AND userStatus=1

[/php]

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注