百度一下不就OK咯SELECT `id`,`map_x`,`map_y`, ROUND(6378.138*2*ASIN(SQRT(POW(SIN((22.546125*PI()/180-`map_y`*PI()/180)/2),2)+COS(22.546125*PI()/180)*COS(`map_y`*PI()/180)*POW(SIN((113.941072*PI()/180-`map_x`*PI()/180)/2),2)))*1000) AS juli FROM `shop` ORDER BY juli
请问怎么写sql语句,把AB2点距离在送货距离之内的店铺都找出来?
FROM `shop`
ORDER BY juli
$sql = "SELECT id, name, address, phone, image, (ACOS(SIN((lat * 3.1415) / 180 ) *SIN(($lat * 3.1415) / 180 ) +COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 ) ) * 6380 * 1000) as DISTINCE "
. " FROM dc_shop WHERE (ACOS(SIN((lat * 3.1415) / 180 ) *SIN(($lat * 3.1415) / 180 ) +COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 ) ) * 6380 * 1000) <= $distance "
. " ORDER BY (ACOS(SIN((lat * 3.1415) / 180 ) *SIN(($lat * 3.1415) / 180 ) +COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 ) ) * 6380 * 1000) ASC LIMIT 0,$num
ACOS(
SIN((lat * 3.1415) / 180 ) * SIN(($lat * 3.1415) / 180 ) +
COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *
COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 )
) * 6380 * 1000
中,套红的部分是可以事先计算好的,因为店铺的位置不会移动
套绿的部分应在书写 sql 指令前计算好
因此在查询时的计算量并不算大,只是多用了几个字段
实际上是以店铺名从表中查到的呀
. " FROM dc_shop WHERE (ACOS(SIN((lat * 3.1415) / 180 ) *SIN(($lat * 3.1415) / 180 ) +COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 ) ) * 6380 * 1000) <= $distance "
. " ORDER BY (ACOS(SIN((lat * 3.1415) / 180 ) *SIN(($lat * 3.1415) / 180 ) +COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 ) ) * 6380 * 1000) ASC LIMIT 0,$num@bailin710258 你这个计算量好大呀。@wwwhhhdd 可否写下你用的sql语句呀。网上搜索 了下有两三种写法,不知道用哪个。
两位版主,可否对这个SQL语句分析一下。是这里的:http://my.oschina.net/laserdance/blog/40854不知道和:
SELECT id, name, address, phone, image, (ACOS(SIN((lat * 3.1415) / 180 ) *SIN(($lat * 3.1415) / 180 ) +COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 ) ) * 6380 * 1000) as DISTINCE "
. " FROM dc_shop WHERE (ACOS(SIN((lat * 3.1415) / 180 ) *SIN(($lat * 3.1415) / 180 ) +COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 ) ) * 6380 * 1000) <= $distance "
. " ORDER BY (ACOS(SIN((lat * 3.1415) / 180 ) *SIN(($lat * 3.1415) / 180 ) +COS((lat * 3.1415) / 180 ) * COS(($lat * 3.1415) / 180 ) *COS((lng * 3.1415) / 180 - ($lng * 3.1415) / 180 ) ) * 6380 * 1000) ASC1、两个SQL语句是不是都对??2、在实际应用中,地球半径你们是取6380还是6371呢????