Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mySQL chọn mã zip trong phạm vi x km / dặm trong phạm vi của y

Bạn phải sử dụng một thứ gọi là công thức Haversine :

$sql = "
    SELECT zipcode
    FROM zipcodes
    WHERE ".mysqlHaversine($lat, $lon, $distance)."
";

Và công thức:

function mysqlHaversine($lat = 0, $lon = 0, $distance = 0)
{
    if($distance > 0)
    {
        return ('
        ((6372.797 * (2 *
        ATAN2(
            SQRT(
                SIN(('.($lat*1).' * (PI()/180)-latitude*(PI()/180))/2) *
                SIN(('.($lat*1).' * (PI()/180)-latitude*(PI()/180))/2) +
                COS(latitude * (PI()/180)) *
                COS('.($lat*1).' * (PI()/180)) *
                SIN(('.($lon*1).' * (PI()/180)-longitude*(PI()/180))/2) *
                SIN(('.($lon*1).' * (PI()/180)-longitude*(PI()/180))/2)
                ),
            SQRT(1-(
                SIN(('.($lat*1).' * (PI()/180)-latitude*(PI()/180))/2) *
                SIN(('.($lat*1).' * (PI()/180)-latitude*(PI()/180))/2) +
                COS(latitude * (PI()/180)) *
                COS('.($lat*1).' * (PI()/180)) *
                SIN(('.($lon*1).' * (PI()/180)-longitude*(PI()/180))/2) *
                SIN(('.($lon*1).' * (PI()/180)-longitude*(PI()/180))/2)
            ))
        )
        )) <= '.($distance/1000). ')');
    }

    return '';
}

Thông thường, tôi không sử dụng mã mà không hiểu cách hoạt động của nó trước, nhưng tôi phải thú nhận rằng chức năng này hơi quá đầu của tôi ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về CURRENT_TIMESTAMP - MySQL

  2. Làm cách nào để lưu hình dạng lớp phủ bản đồ Google trong cơ sở dữ liệu?

  3. Làm thế nào để hiển thị danh mục và danh mục con?

  4. Tạo một bảng với các tên cột bắt nguồn từ các giá trị hàng của một bảng khác

  5. Cách đặt MySQL để sử dụng GMT trong Windows và Linux