PHP 复杂的查询,怎么加入排序。
$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
解决了,最终方案。
推荐阅读
-
php数组怎么根据其中的一个值进行排序?解决方法
-
php查询到的数据乱码和转json时中文变成了Unicode的编码怎么解决?
-
Spring data jpa的使用与详解(复杂动态查询及分页,排序)
-
wps表格怎么设置自动筛选实现成绩等数据的快速查询与排序
-
小白继续。PHP中怎么把数组作为sql查询语句的条件
-
php查询数据库的int字段,打印出来怎么是字符串类型呢?
-
php怎么输出以下使用聚集函数和分组数据查询出来的MySQL查询结果?
-
小白继续。PHP中怎么把数组作为sql查询语句的条件
-
请问使用php的pdo查询出来怎么会是空白?
-
怎么将下面地址的查询界面嵌入PHP页面,并将查询结果返回到小弟我自定的页面