您好,欢迎访问一九零五行业门户网

PHP 复杂的查询,怎么加入排序

$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 
解决了,最终方案。
其它类似信息

推荐信息