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>

ありがとう

4

1 に答える 1

3

都市/地域ではなく、IP都市の経度/緯度を取得し、そこにある$sql2クエリでその緯度/経度を使用する必要があります。

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( $lat ) ) * cos( radians( $lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( $lat ) ) ) ) AS 距離 FROM マーカー HAVING 距離 < 25 ORDER BY 距離 LIMIT 0 , 20;

以下は、座標 37, -122 から半径 25 マイル以内にある最も近い 20 の場所を見つける SQL ステートメントです。その行の緯度/経度とターゲットの緯度/経度に基づいて距離を計算し、距離の値が 25 未満の行のみを要求し、クエリ全体を距離で並べ替え、結果を 20 に制限します。マイルではなくキロメートルで検索するには、3959 を 6371 に置き換えます。

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

于 2012-06-12T12:10:02.797 に答える