Me parece que está asumiendo que una vez que haya seleccionado z.id
en la consulta, que esto le da acceso directo a la x(property)
y y(property)
(Aparte, ¿esos nombres realmente tienen paréntesis entre ellos?)
Entonces, para mí, parece que deberías reemplazar cosas como
* COS(RADIANS(z.(x(property))))
con algo como
* COS(RADIANS( select x(property) from mytable where id = z.id ))
Sin embargo, pensando más en ello, creo que su mytable
no tiene la estructura requerida. Al mirar el enlace, creo que su mytable
debería tener una estructura más como:
+-----------+----------------+
| Field | Type |
+-----------+----------------+
| id | Int(10) |
| latitude | Float |
| longitude | Float |
+-----------+----------------+
Para que puedas hacer algo como
* COS(RADIANS(z.latitude))
NOTA
Lo anterior se basó en que no entendí que MySQL admite tipos de datos espaciales (para los cuales no tengo idea de cómo usarlos)
Actualizar
Acabo de buscar en Google para entender los tipos espaciales y encontré esto:
lo que sugiere que no puedes haga lo que quiera hacer con los tipos de datos espaciales en mysql. Lo que lo lleva de nuevo a usar una forma no óptima de almacenar datos en mutable
Sin embargo, al volver a leer ese enlace, los comentarios a la respuesta sugieren que ahora puede usar tipos de datos espaciales. (Te dije que no tenía ni idea aquí) Esto significaría reemplazar el código de consulta con cosas como ST_Distance(g1,g2)
, lo que efectivamente significa reescribir totalmente el ejemplo.
Para decirlo de otra manera
actualización 2
Hay tres caminos que puedes seguir:
-
Negar que existan tipos de datos espaciales en MySQL y usar una tabla que tenga columnas explícitas para
lat
ylong
y use el código de muestra como se escribió originalmente en ese blog. -
Adopte los tipos de datos espaciales de MySQL (verrugas y todo) y observe cosas como esta respuesta https:/ /stackoverflow.com/a/21231960/31326 que parecen hacer lo que usted quiere directamente con los tipos de datos espaciales, pero como se indica en esa respuesta, hay algunas advertencias.
-
Use un tipo espacial para almacenar sus datos y use una
pre-query
para extraerlat
ylong
antes de pasarlo al código de muestra original.