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

php/mysqlの郵便番号近接検索

    これが私が見つけた最良の方法です。もちろん、データベースにすべての郵便番号lat/lonがエンコードされている必要があります。

    // get all the zipcodes within the specified radius - default 20
    function zipcodeRadius($lat, $lon, $radius)
    {
        $radius = $radius ? $radius : 20;
        $sql = 'SELECT distinct(ZipCode) FROM zipcode  WHERE (3958*3.1415926*sqrt((Latitude-'.$lat.')*(Latitude-'.$lat.') + cos(Latitude/57.29578)*cos('.$lat.'/57.29578)*(Longitude-'.$lon.')*(Longitude-'.$lon.'))/180) <= '.$radius.';';
        $result = $this->db->query($sql);
        // get each result
        $zipcodeList = array();
        while($row = $this->db->fetch_array($result))
        {
            array_push($zipcodeList, $row['ZipCode']);
        }
        return $zipcodeList;
    }
    

    この関数をドロップするだけでよいはずです。半径を指定する郵便番号の$latと$lonを渡し、オプションの半径を含めて、郵便番号のリストを取得します。

    これを非常に簡単に変更して、郵便番号IN(radius_sql)のすべてのユーザーを取得し、リストユーザーを元に戻すことができます。

    ハッピーコーディング!



    1. SQLでCOUNTを使用する方法は?

    2. クエリで指定された順序によるSQLの並べ替え順序

    3. JPAHibernateを使用してMySQLストアドプロシージャを作成する

    4. PHPのSQLパーサー?