sql >> データベース >  >> RDS >> Mysql

特定のlat/lng内の場所を見つけるためのクエリ

    以下のコードのように実装します(免責事項:これをファイルから切り取って、目前の問題に関係のないコードを削除しました。これは実行しませんでしたが、理解できるはずです。

    $maxLat = $city->latitude + ($max_distance / 69); // 69 Miles/Degree
    $minLat = $city->latitude - ($max_distance / 69);
    
    $maxLon = $city->longitude + ($max_distance / (69.172 * cos($city->latitude * 0.0174533)));
    $minLon = $city->longitude - ($max_distance / (69.172 * cos($city->latitude * 0.0174533)));
    
    // Simplify terms to speed query
    $originLatRadCos = cos($city->latitude * 0.0174533);
    $originLatRadSin = sin($city->latitude * 0.0174533);
    $originLonRad = $city->longitude * 0.0174533;
    
    $city_distance_query = "
    SELECT city_id, 
      3963 * acos(($originLatRadSin * sin( latitude * 0.0174533)) + 
      ($originLatRadCos * cos(latitude * 0.0174533) * cos((longitude * 0.0174533) -
      $originLonRad))) AS distanceFromOrigin
    FROM cities
    WHERE
     latitude < $maxLat AND latitude > $minLat AND longitude < $maxLon AND longitude > $minLon";
    

    残りのクエリ

    SELECT cities.city_name, CityDistance.distanceFromOrigin,
    FROM cities 
    INNER JOIN ($city_distance_query) AS CityDistance ON CityDistance.city_id=cities.city_id
    WHERE (distanceFromOrigin < $distance OR distanceFromOrigin IS NULL) 
    


    1. MariaDBでのTIMESTAMPADD()のしくみ

    2. Oracle D2k、Oracle Forms 10g、OracleForms6iで添付ファイル付きの電子メールを送信する

    3. 各単語の頻度を数える

    4. Datagridviewのテーブルピボットスタイルをフラット化する