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:
-
Tolak bahwa tipe data spasial ada di MySQL dan gunakan tabel yang memiliki kolom eksplisit untuk
lat
danlong
, dan gunakan kode contoh seperti yang tertulis di blog tersebut. -
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.
-
Gunakan tipe spasial untuk menyimpan data Anda, dan gunakan
pre-query
untuk mengekstraklat
danlong
sebelum meneruskannya ke kode sampel asli.