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

Truy vấn CakePHP kinh độ vĩ độ gần nhất từ ​​cơ sở dữ liệu

không còn các trường ảo trong phần 3 nhưng bạn vẫn có thể tạo bí danh cho trường được tính toán của mình

Theo đề xuất của @ndm, tốt hơn bạn nên ràng buộc $latitude$longitude để ngăn chặn việc đưa vào SQL

$distanceField = '(3959 * acos (cos ( radians(:latitude) )
    * cos( radians( Sightings.latitude ) )
    * cos( radians( Sightings.longitude )
    - radians(:longitude) )
    + sin ( radians(:latitude) )
    * sin( radians( Sightings.latitude ) )))';

sử dụng ở đâu

$sightings = $this->Sightings->find()
    ->select([
        'distance' => $distanceField
    ])
    ->where(["$distanceField < " => $distance])
    ->bind(':latitude', $latitude, 'float')
    ->bind(':longitude', $longitude, 'float')
    ->contain(['Photos', 'Tags']);

sử dụng có

$sightings = $this->Sightings->find()
    ->select([
        'distance' => $distanceField
    ])
    ->having(['distance < ' => $distance])
    ->bind(':latitude', $latitude, 'float')
    ->bind(':longitude', $longitude, 'float')
    ->contain(['Photos', 'Tags']);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi định dạng ngày của Hoa Kỳ sang định dạng ngày ANSI SQL (YYYY-mm-dd)

  2. Cách hoạt động của toán tử RLIKE trong MySQL

  3. Cách ghi chính xác các chuỗi UTF-8 vào MySQL thông qua giao diện JDBC

  4. Làm cách nào để MySql 8 chạy với laravel?

  5. Tải xuống kết xuất MySQL từ dòng lệnh