Струва ми се, че предполагате, че след като сте избрали z.id
в заявката, че това ви дава директен достъп до x(property)
и y(property)
(Настрана – наистина ли тези имена имат скоби?)
Така че според мен изглежда, че трябва да замените неща като
* COS(RADIANS(z.(x(property))))
с нещо като
* COS(RADIANS( select x(property) from mytable where id = z.id ))
Въпреки това, като се замисля по-нататък, мисля, че вашата mytable
няма необходимата структура. Като гледам връзката, вярвам, че вашата mytable
трябва да има структура, по-скоро като:
+-----------+----------------+
| Field | Type |
+-----------+----------------+
| id | Int(10) |
| latitude | Float |
| longitude | Float |
+-----------+----------------+
За да можете да направите нещо като
* COS(RADIANS(z.latitude))
ЗАБЕЛЕЖКА
Горното се основава на това, че не разбирам, че MySQL поддържа типове пространствени данни (за които нямам представа как да използвам)
Актуализиране
Просто потърсих в Google, за да разбера пространствените типове и открих това:
Как използвате MySQL пространствени заявки, за да намерите всички записи в X радиус? [затворено]
което предполага, че не можете направете това, което искате да правите с типове пространствени данни в mysql. Което по този начин ви връща към използването на неоптимален начин за съхранение на данни в mutable
Въпреки това при повторно четене на тази връзка коментарите към отговора предполагат, че вече може да можете да използвате типове пространствени данни. (Казах ви, че нямам представа тук) Това би означавало замяна на кода на заявката с неща като ST_Distance(g1,g2)
, което на практика означава пълно пренаписване на примера.
Казано по друг начин
актуализация 2
Има три пътя, които можете да следвате:
-
Откажете, че в MySQL съществуват типове пространствени данни и използвайте таблица, която има изрични колони за
lat
иlong
, и използвайте примерния код, както първоначално е написано в този блог. -
Прегърнете типовете пространствени данни на MySQL (брадавици и всичко останало) и разгледайте неща като този отговор https:/ /stackoverflow.com/a/21231960/31326 които изглежда правят това, което искате директно с типове пространствени данни, но както е отбелязано в този отговор, има някои предупреждения.
-
Използвайте пространствен тип, за да съхранявате данните си, и използвайте
pre-query
за извличане наlat
иlong
преди да го прехвърлите в оригиналния примерен код.