2012-06-12 68 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
相关问题