2011-04-10 2 views
1

現在の緯度/経度の近くにあるリストを取得しようとしています。現在のLatitude/LongituteにMySQL SELECT ASを使用

MySQLの地理空間POINTを無駄にしようとしたため、各レコードのDECIMAL緯度/経度値を使用して戻りました。

以下の機能は、10km以内のリストを取得するためのものです(this formulaに基づいています)SELECTが正しくないとわかりましたが、(ACOS ... 1.1515)を距離その後、他の列を選択します。

// functions.php 
function getDeals($type_of_deal) { 
    $current_lat = -37.905; 
    $current_lon = 175.505 
    $result = mysql_query(" 
    SELECT i, company, 
     TIME_FORMAT(valid_time_start, '%l:%i %p'), 
     TIME_FORMAT(valid_time_end, '%l:%i %p'), 
     DATE_FORMAT(valid_expiry, '%D %b %y'), 
     ((ACOS(SIN("$current_lat" * PI()/180) * SIN(`company_lat` * PI()/180) + 
     COS("$current_lat" * PI()/180) * COS(`company_lat` * PI()/180) * 
     COS(("$current_lon" – `company_lon`) * PI()/180)) * 180/PI()) * 60 * 1.1515) 
    AS distance 
    FROM listings 
    WHERE deal_type = '" .$type_of_deal. "' 
    HAVING distance<=’10′ 
    ORDER BY `distance` ASC 
    "); 
return $result; 

// location.php 
$type_of_deal = food; 
$result = getDeals($type_of_deal); 
    if (mysql_num_rows($result)) { 
     while($row = mysql_fetch_array($result)) { 
      echo $row["deal_title"]; 
      } 
    } 

答えて

1

あなたはMySQL great circle distanceに探してみることができます。そして、あなたはまた、Google maps SQL api @見てみることができます。これは、別の場所に近い場所を検索する方法を示します。

について具体的に見てあなたのコードでいくつかのエラーがあります。

文の後に
  1. ませんセミコロン:

    $ current_lon = 175.505 $結果を=するmysql_query(文字列の」

  2. ませ連結(あなたの文字列のだけでなく、それらの内部二重引用符を使用します)。

  3. いいえ}機能が終了した後。

ここにあなたのコードの迅速なクリーンアップだ:

function getDeals($type_of_deal) { 
    $current_lat = -37.905; 
    $current_lon = 175.505 
    $result = mysql_query('SELECT i, company, 
     TIME_FORMAT(valid_time_start, "%l:%i %p"), 
     TIME_FORMAT(valid_time_end, "%l:%i %p"), 
     DATE_FORMAT(valid_expiry, "%D %b %y"), 
     ((ACOS(SIN('.$current_lat.' * PI()/180) * SIN(`company_lat` * PI()/180) + 
     COS('.$current_lat.' * PI()/180) * COS(`company_lat` * PI()/180) * 
     COS(('.$current_lon.' – `company_lon`) * PI()/180)) * 180/PI()) * 60 * 1.1515) 
    AS distance 
    FROM listings 
    WHERE deal_type = "'.$type_of_deal.'" 
    HAVING distance<=10 
    ORDER BY `distance` ASC'); 
    return $result; 
} 
+1

ニース応答 - 私はあなたがで同じことを実行するためのPHPコードを見つけることができることを追加したい:http://www.thetechnote.com/ 2011/02/3-useful-geolocation-functions-in-php / – soulkphp

関連する問題