我正在尝试在 php 中创建一个 mysql 查询,该查询根据地理坐标生成距离,但我的查询不断复制表中第一个 sid 行的数据。如何让我的查询为具有被调用 sid 的每一行生成结果?
地理表:
fid |席德 |纬度 |经度
887 | 696 | 696 38.62774 | -90.199514
823 | 696 | 696 38.63979 | -90.02946
887 | 693 | 693 38.62774 | -90.199514
823 | 693 | 693 38.59430 | -90.260372
查询结果:
fid |席德 |距离
887 | 696 | 696 0.05
887 | 696 | 696 0.05
887 | 693 | 693 0.05
887 | 693 | 693 0.05
期望的查询结果:
fid |席德 |距离
887 | 696 | 696 0.05
823 | 696 | 696 3.10
887 | 693 | 693 0.05
823 | 693 | 693 12.02
PHP 查询:
public function ListEntry( &$data ){
$task = SPRequest::string('task', null );
if (strtolower($task)!="search.results")
return ;
$session = JFactory::getSession();
$ref_lat = $session->get('mj_rs_ref_lat', null);
$ref_lng = $session->get('mj_rs_ref_lng', null);
$ref_loc = $session->get('mj_rs_center_selector', null);
$ref_dis = $session->get('mj_rs_ref_dist', null);
if (!$ref_lat OR !$ref_lng)
return ;
$km = $this->_getKm() ;
$id = $data['id'] ;
$db =& JFactory::getDBO();
$query = " SELECT GEO.fid, GEO.sid, ";
$query.= " ({$km}*acos(cos(radians({$ref_lat}))*cos(radians(GEO.latitude))*cos(radians(GEO.longitude)-radians({$ref_lng}))+sin(radians({$ref_lat}))*sin(radians(GEO.latitude)))) AS distance ";
$query.= " FROM `#__field_geo` AS GEO ";
$query.= " WHERE GEO.sid = {$id} ";
$query.= " ORDER BY distance ASC ";
$query.= " LIMIT 1 ";
$db->setQuery($query);
$distances = $db->loadAssoc();
$fidgeo = $distances['fid'];
$later = $distances['sid'];
$distance = $distances['distance'];
}
感谢您的帮助!
最佳答案
尝试在 SQL 查询中使用 Distinct 关键字
关于php mysql 结果为每个 sid 重复第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19945649/