Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perlu bantuan ahli untuk menyelesaikan perubahan kecil dalam kueri data spasial

Sepertinya saya berasumsi bahwa setelah Anda memilih z.id dalam kueri, bahwa ini memberi Anda akses langsung ke x(property) dan y(property)

(Selain - apakah nama-nama itu benar-benar memiliki tanda kurung?)

Jadi bagi saya sepertinya Anda harus mengganti hal-hal seperti

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

dengan sesuatu seperti

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

Namun setelah memikirkannya lebih lanjut, saya pikir mytable Anda tidak memiliki struktur yang dibutuhkan. Dari melihat tautannya, saya yakin bahwa mytable Anda harus memiliki struktur yang lebih seperti:

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

Sehingga Anda dapat melakukan sesuatu seperti

* COS(RADIANS(z.latitude))

CATATAN

Di atas didasarkan pada saya tidak mengerti bahwa MySQL mendukung tipe data spasial (yang saya tidak tahu bagaimana menggunakannya)

Perbarui

Saya baru saja melakukan googling untuk memahami tipe spasial dan menemukan ini:

Bagaimana Anda menggunakan kueri spasial MySQL untuk menemukan semua catatan dalam radius X? [Tutup]

yang menunjukkan bahwa Anda tidak bisa lakukan apa yang ingin Anda lakukan dengan tipe data spasial di mysql. Yang dengan demikian membawa Anda kembali menggunakan cara penyimpanan data yang tidak optimal dalam mutable

Namun dalam membaca kembali tautan itu, komentar pada jawaban menunjukkan bahwa Anda sekarang mungkin dapat menggunakan tipe data spasial. (Sudah saya katakan bahwa saya tidak memiliki petunjuk di sini) Ini berarti mengganti kode kueri dengan hal-hal seperti ST_Distance(g1,g2) , yang secara efektif berarti menulis ulang contoh secara total.

Dengan kata lain

perbarui 2

Ada tiga jalur yang bisa Anda ikuti:

  1. Tolak bahwa tipe data spasial ada di MySQL dan gunakan tabel yang memiliki kolom eksplisit untuk lat dan long , dan gunakan kode contoh seperti yang tertulis di blog tersebut.

  2. Rangkullah tipe data spasial MySQL (kutil dan semuanya) dan lihat hal-hal seperti jawaban ini https:/ /stackoverflow.com/a/21231960/31326 yang tampaknya melakukan apa yang Anda inginkan secara langsung dengan tipe data spasial, tetapi seperti yang dicatat dalam jawaban itu ada beberapa peringatan.

  3. Gunakan tipe spasial untuk menyimpan data Anda, dan gunakan pre-query untuk mengekstrak lat dan long sebelum meneruskannya ke kode sampel asli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wordpress menggabungkan kueri

  2. MySQL 'user_id' di mana klausa adalah masalah ambigu

  3. apakah memiliki jutaan tabel dan jutaan baris di dalamnya merupakan praktik umum dalam desain database MySQL?

  4. Bisakah Anda DROP TABLE IF EXISTS dengan menentukan nama database dengan tabel?

  5. Menggunakan parameter URL dalam pencarian MYSQL