2012-06-12 61 views
0

我有MySQL 5.1,我正在尋找基於IP填充最近城市的選擇框。我已經下載了Max Mind的GeoLite數據庫,但我無法弄清楚如何填充接近IP的城市。我還想「預先選擇」最近的基於IP的城市。使用地理定位搜索最近的城市

我寫了一些代碼,但我只能顯示我找到的國家的所有城市。那麼,有人可以告訴我如何做到這一點?

<?php 
$ip=$_SERVER["REMOTE_ADDR"]; 
$user="user"; 
$pass="password"; 

$conn=mysql_connect("localhost:3306",$user,$pass); 
$link=mysql_select_db("db"); 

$ipConv=ip2long($ip); 
$sql="SELECT CITY,REGION,LATITUDE,LONGITUDE 
FROM location, blocks 
WHERE $ipConv 
BETWEEN blocks.startIpNum 
AND blocks.endIpNum 
AND location.locId = blocks.locid"; 
$result=mysql_query($sql) or die (mysql_error()); 
while($row = mysql_fetch_assoc($result)) 
{ 
    $tcity=$row['CITY']; 
    $tregion=$row['REGION']; 
} 

$sql2="SELECT COUNTRY FROM location WHERE CITY='$tcity'"; 
$result2=mysql_query($sql2); 
while($row2 = mysql_fetch_assoc($result2)) 
{ 
    $country=$row2['COUNTRY']; 
} 

$sql3="SELECT CITY,REGION FROM location WHERE COUNTRY='$country' GROUP BY REGION"; 
$result3=mysql_query($sql3); 
?> 
<form> 
<select> 
<?php 
while ($row3=mysql_fetch_assoc($result3)) 
{ 
?> 
    <option <?php if ($row3['CITY']==$tcity){ ?> selected="selected"<?php } ?>)> 
    <?php echo $row3['CITY']; ?> 
    </option><?php 
} ?> 

</select> 
</form> 

感謝

回答

3

你需要獲取IP地址城市的經度/緯度,而不是城市/地區,並使用該緯度/經度在$sql2查詢你那裏。 (3959 * acos(cos(弧度(37))* cos(弧度($ lat))* cos(弧度($ lng) - 弧度(-122))+ sin(弧度(37))。 )* sin(弧度($ lat))))距標記距離距離< 25 ORDER BY distance LIMIT 0,20;

下面是SQL語句,它將查找距離37,-122座標25英里半徑內最近的20個位置。它根據該行的緯度/經度和目標緯度/經度計算距離,然後僅請求距離值小於25的行,按距離排序整個查詢,並將其限制爲20個結果。要通過公里而非英里搜尋,與6371.

https://developers.google.com/maps/articles/phpsqlsearch?hl=hu-HU#findnearsql

取代3959
相關問題