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