2012-01-03 14 views
0

私のデータベースには多くの取引があります。私は、引数「緯度」「経度」と半径を...送信することで、データベースからいくつかの特定の取引をseleectたい それとwrontれるもの取り組んこのクエリイマイチ...特定の距離内のポイントを選択

require('includes/connection.php'); // defines $dsn, $username, $password  
    $lat = $_GET['lat']; // latitude of centre of bounding circle in degrees 
    $lon = $_GET['lon']; // longitude of centre of bounding circle in degrees 
    $rad = $_GET['rad']; // radius of bounding circle in kilometers 
    $R = 6371; // earth's radius, km 
    // first-cut bounding box (in degrees) 
    $maxLat = $lat + rad2deg($rad/$R); 
    $minLat = $lat - rad2deg($rad/$R); 
    // compensate for degrees longitude getting smaller with increasing latitude 
    $maxLon = $lon + rad2deg($rad/$R/cos(deg2rad($lat))); 
    $minLon = $lon - rad2deg($rad/$R/cos(deg2rad($lat))); 

    // convert origin of filter circle to radians 
    $lat = deg2rad($lat); 
    $lon = deg2rad($lon); 
    $sql = " Select * From From deals 
     Where lat>$minLat And lat<$maxLat 
     And lon>$minLon And lon<$maxLon 
    Where acos(sin($lat)*sin(radians(lat)) + cos($lat)*cos(radians(lat))*cos(radians(lon)-$lon))*$R < $rad"; 
echo "Query =".$sql; 
    $points = mysql_query($sql); 
+3

「動作していない」とはどういう意味ですか?結果が表示されないのですが、エラーメッセージが表示されていますか?少し具体的にしてください。すぐに試すことができるのは、SQLクエリ文字列を出力して、結果の文を実行することです。 phpmyadmin? – codeling

+0

クエリ内に$で変数を渡すことはできません。sprintfを使用するか、連結するか、同様のソリューションを使用する必要があります。 http://php.net/manual/en/function.mysql-query.php – Viruzzo

+0

@Viruzzoの例を参照してください:私が知る限り、実際に動作するはずです(例:http://www.brainbell.com/tutorsを参照してください)。 /php/php_mysql/Variable_substitution.html) – codeling

答えて

2

小変更が必要です。whereandと置き換えてください。ここでは2つのwhere節を使用できません。また、2つのfrom節は許されません。

以下のクエリで試してください。

Select * From deals 
Where lat>$minLat 
And lat<$maxLat 
And lon>$minLon 
And lon<$maxLon 
and acos(sin($lat)*sin(radians(lat))+cos($lat)*cos(radians(lat))*cos(radians(lon)-$lon))*$R < $rad";` 
3

あなたは2を持っているので、それは働いていません"WHERE"ステートメント。おそらく、2番目の「WHERE」を「AND」に変更するだけです。

+0

2件も許可されていません。 –

関連する問題