Parece-me que você está assumindo que depois de selecionar
z.id
na consulta, que isso lhe dá acesso direto ao x(property)
e y(property)
(À parte - esses nomes realmente têm parênteses?)
Então, para mim, parece que você deve substituir coisas como
* COS(RADIANS(z.(x(property))))
com algo como
* COS(RADIANS( select x(property) from mytable where id = z.id ))
No entanto, pensando melhor sobre isso, acho que sua
mytable
não tem a estrutura necessária. Olhando para o link, acredito que sua mytable
deveria ter uma estrutura mais parecida com:+-----------+----------------+
| Field | Type |
+-----------+----------------+
| id | Int(10) |
| latitude | Float |
| longitude | Float |
+-----------+----------------+
Para que você possa fazer algo como
* COS(RADIANS(z.latitude))
OBSERVAÇÃO
O acima foi baseado em não entender que o MySQL suporta tipos de dados espaciais (para os quais não tenho ideia de como usar)
Atualizar
Acabei de pesquisar no Google para entender os tipos espaciais e encontrei isso:
Como você usa consultas espaciais do MySQL para encontrar todos os registros no raio X? [fechado]
o que sugere que você não pode faça o que você quer fazer com tipos de dados espaciais no mysql. Assim, você volta a usar uma maneira não ideal de armazenar dados em
mutable
No entanto, ao reler esse link, os comentários da resposta sugerem que agora você pode usar tipos de dados espaciais. (Eu disse que não tinha a menor idéia aqui) Isso significaria substituir o código de consulta por coisas como
ST_Distance(g1,g2)
, o que efetivamente significa reescrever totalmente o exemplo. Para colocar de outra forma
atualização 2
Existem três caminhos que você pode seguir:
-
Negue a existência de tipos de dados espaciais no MySQL e use uma tabela que tenha colunas explícitas paralat
elong
e use o código de exemplo originalmente escrito nesse blog.
-
Abrace os tipos de dados espaciais do MySQL (verrugas e tudo) e dê uma olhada em coisas como esta resposta https:/ /stackoverflow.com/a/21231960/31326 que parecem fazer o que você deseja diretamente com tipos de dados espaciais, mas, conforme observado nessa resposta, há algumas ressalvas.
-
Use um tipo espacial para armazenar seus dados e use umapre-query
para extrairlat
elong
antes de passá-lo para o código de amostra original.