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

Cần sự trợ giúp của chuyên gia để giải quyết thay đổi nhỏ trong truy vấn dữ liệu không gian

Đối với tôi, dường như bạn đang giả định rằng khi bạn đã chọn z.id trong truy vấn, điều này cung cấp cho bạn quyền truy cập trực tiếp vào x(property)y(property)

(Ngoài ra - những cái tên đó có thực sự có dấu ngoặc đơn trong đó không?)

Vì vậy, với tôi, có vẻ như bạn nên thay thế những thứ như

* COS(RADIANS(z.(x(property))))

với một cái gì đó như

* COS(RADIANS( select x(property) from mytable where id = z.id ))

Tuy nhiên, khi suy nghĩ thêm về nó, tôi nghĩ rằng mytable của bạn không có cấu trúc bắt buộc. Từ việc nhìn vào liên kết, tôi tin rằng mytable của bạn nên có cấu trúc giống như sau:

+-----------+----------------+
| Field     |    Type        |
+-----------+----------------+
|  id       |        Int(10) |
| latitude  |        Float   |
| longitude |        Float   |
+-----------+----------------+

Vì vậy, bạn có thể làm điều gì đó như

* COS(RADIANS(z.latitude))

LƯU Ý

Phần trên dựa trên việc tôi không hiểu rằng MySQL hỗ trợ các kiểu dữ liệu không gian (mà tôi không biết cách sử dụng)

Cập nhật

Tôi vừa thực hiện một số googling để hiểu các kiểu không gian và tìm thấy điều này:

Làm cách nào để bạn sử dụng truy vấn không gian MySQL để tìm tất cả các bản ghi trong bán kính X? [đã đóng]

điều này cho thấy rằng bạn không thể làm những gì bạn muốn làm với các kiểu dữ liệu không gian trong mysql. Do đó, điều này sẽ đưa bạn trở lại việc sử dụng một cách không tối ưu để lưu trữ dữ liệu trong mutable

Tuy nhiên, khi đọc lại liên kết đó, các nhận xét cho câu trả lời cho thấy rằng bây giờ bạn có thể sử dụng các kiểu dữ liệu không gian. (Tôi đã nói với bạn rằng tôi không có manh mối nào ở đây) Điều này có nghĩa là thay thế mã truy vấn bằng những thứ như ST_Distance(g1,g2) , có nghĩa là viết lại hoàn toàn ví dụ.

Nói một cách khác

cập nhật 2

Có ba con đường bạn có thể làm theo:

  1. Từ chối rằng các kiểu dữ liệu không gian tồn tại trong MySQL và sử dụng bảng có các cột rõ ràng cho latlong và sử dụng mã mẫu như được viết ban đầu trên blog đó.

  2. Nắm bắt các kiểu dữ liệu không gian MySQL (mụn cóc và tất cả) và xem những thứ như câu trả lời này https:/ /stackoverflow.com/a/21231960/31326 điều đó dường như trực tiếp làm những gì bạn muốn với các kiểu dữ liệu không gian, nhưng như đã lưu ý trong câu trả lời đó, có một số lưu ý.

  3. Sử dụng kiểu không gian để lưu giữ dữ liệu của bạn và sử dụng pre-query để giải nén latlong trước khi chuyển nó vào mã mẫu ban đầu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để tạo ra các lần đọc ảo?

  2. Cách hiệu quả để tính toán số lượng khóa ngoại trong bảng thứ hai và hiển thị nó với các hàng từ bảng đầu tiên - PHP - MySQL

  3. Có nhiều hơn một AutoIncrement trên mỗi bảng

  4. Làm thế nào để lưu trữ wxImage vào cơ sở dữ liệu, sử dụng C ++?

  5. Xuất dữ liệu MYSQL sang Excel / CSV qua php