$latitude = $_get['y'];
$longitude = $_get['x'];
$distance = 500;
$sql = select * from . $globals['ecs']->table('weixin_map') . where sqrt( ( ((.$longitude.-longitude)*pi()*12656*cos(((.$latitude.+latitude)/2)*pi()/180)/180) * ((.$longitude.-longitude)*pi()*12656*cos (((.$latitude.+latitude)/2)*pi()/180)/180) ) + ( ((.$latitude.-latitude)*pi()*12656/180) * ((.$latitude.-latitude)*pi()*12656/180) ) )/2
我这个是查询500公里以前的商家信息,可是查出来了,但无法按近距离到远距离排序。
查具体方法。
回复讨论(解决方案) 怎么通过array,计算出所有信息的距离,然后再重新排序啊。
我的思路是,新建一个数组然后每条数据计算一次,计算距离,然后再通过这个数据来排序。
谁有空帮忙写出来。。。
select *, sqrt( ( ((.$longitude.-longitude)*pi()*12656*cos(((.$latitude.+latitude)/2)*pi()/180)/180) * ((.$longitude.-longitude)*pi()*12656*cos (((.$latitude.+latitude)/2)*pi()/180)/180) ) + ( ((.$latitude.-latitude)*pi()*12656/180) * ((.$latitude.-latitude)*pi()*12656/180) ) )/2 as dis
from 表 order by dis having dis
select *, sqrt( ( ((.$longitude.-longitude)*pi()*12656*cos(((.$latitude.+latitude)/2)*pi()/180)/180) * ((.$longitude.-longitude)*pi()*12656*cos (((.$latitude.+latitude)/2)*pi()/180)/180) ) + ( ((.$latitude.-latitude)*pi()*12656/180) * ((.$latitude.-latitude)*pi()*12656/180) ) )/2 as dis
from 表 order by dis having dis
出错了,提示 having dis errno
select *, sqrt( ( ((.$longitude.-longitude)*pi()*12656*cos(((.$latitude.+latitude)/2)*pi()/180)/180) * ((.$longitude.-longitude)*pi()*12656*cos (((.$latitude.+latitude)/2)*pi()/180)/180) ) + ( ((.$latitude.-latitude)*pi()*12656/180) * ((.$latitude.-latitude)*pi()*12656/180) ) )/2 as dis
from 表 order by dis having dis
$sql = select *, sqrt( ( ((.$longitude.-longitude)*pi()*12656*cos(((.$latitude.+latitude)/2)*pi()/180)/180) * ((.$longitude.-longitude)*pi()*12656*cos (((.$latitude.+latitude)/2)*pi()/180)/180) ) + ( ((.$latitude.-latitude)*pi()*12656/180) * ((.$latitude.-latitude)*pi()*12656/180) ) )/2 as dis
from . $globals['ecs']->table('weixin_map') . group by dis having dis
这样可以排序了,但刚好相反了。。 select *, sqrt( ( ((.$longitude.-longitude)*pi()*12656*cos(((.$latitude.+latitude)/2)*pi()/180)/180) * ((.$longitude.-longitude)*pi()*12656*cos (((.$latitude.+latitude)/2)*pi()/180)/180) ) + ( ((.$latitude.-latitude)*pi()*12656/180) * ((.$latitude.-latitude)*pi()*12656/180) ) )/2 as dis
from . $globals['ecs']->table('weixin_map') . group by dis desc having dis
解决了,最终方案。