1
我向您解释问题所在。我有两个表格:“列表”,其中包含我的所有列表,其中包含不同的信息,特别是一个:城市ID。我有第二张表“城市”,其中包含我国所有城市的完整列表,其中包含许多信息:纬度,经度,城市名称等。将这2个MySQL查询合并为一个
我想显示按实际点(地理定位,我有lat/lng)和上市表中的城市。
Actualy,我这样做有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,但没有奏效。你能帮我吗 ?谢谢 !
嗯,谢谢,但它只是做同样的事情,第一个查询。它正在工作,但我想在第二个查询中使用此“dist”值。获得我的列表的人。 – jackson 2013-04-06 09:03:48
@jackson:似乎你忘记在第二个查询中放置表名,$ this-> db_listing。$ whereClause用where子句开始省略表的名称,可以放置表的名称吗? 分享你的数据结构我会帮你的。 – 2013-04-06 09:16:40
表 “挂牌” ID,LISTING_NAME,城市 表 “城市” ID,纬度,经度,CITY_NAME 所以全球我想这样做: SELECT * FROM上市ORDER BY DIST 但是,在 “DIST”字段由第一个查询生成,而不是第二个。 – jackson 2013-04-06 09:21:19