我给你解释问题。我有两个表:“列表”,其中包含我所有具有不同信息的列表,特别是一个:城市 ID。我有第二张表“城市”,其中包含我国家所有城市的完整列表,其中包含许多信息:纬度、经度、城市名称等。
我想在列表中显示按实际点(地理定位,我有纬度/经度)和城市之间的距离排序的所有列表。
实际上,我使用 2 个 MySQL 查询来执行此操作,并且可以正常工作:
$formula = "(6366*acos(cos(radians($latitude))*cos(radians(`latitude`))*cos(radians(`longitude`) -radians($longitude))+sin(radians($latitude))*sin(radians(`latitude`))))";
$q = "SELECT *,$formula AS dist FROM ".$this->db_city." WHERE $formula<='$distance' ORDER by dist ASC";
$q = $this->db->query($q);
$resultSQL = $q->result_array();
和这个 :
if ($localization != ''){
if ($whereClause == ''){
//$whereClause .= ' WHERE address_city LIKE "'.$localization.'"';
$loc = '';
foreach ($localization as $key => $value) {
if ($loc == ''){
$loc .= '"'.$value.'"';
}else{
$loc .= ', "'.$value.'"';
}
}
$whereClause .= ' WHERE address_city IN ('.$loc.')';
}else{
//$whereClause .= ' && address_city LIKE "'.$localization.'"';
$loc = '';
foreach ($localization as $key => $value) {
if ($loc == ''){
$loc .= '"'.$value.'"';
}else{
$loc .= ', "'.$value.'"';
}
}
$whereClause .= ' && address_city IN ('.$loc.')';
}
}
$q = "SELECT * FROM ".$this->db_listing.$whereClause." ORDER BY created_stamp DESC";
这是可行的,但问题是我在第二个查询中没有可访问的“dist”参数,所以我不能按 dist 排序。解决方案是将第一个大查询(带有公式的那个)与第二个合并。
我尝试使用 LEFT JOIN,但没有成功。你能帮我吗 ?谢谢 !