Il me semble que vous supposez qu'une fois que vous avez sélectionné z.id
dans la requête, que cela vous donne un accès direct au x(property)
et y(property)
(À part - ces noms ont-ils vraiment des parenthèses ?)
Donc, pour moi, il semble que vous devriez remplacer des choses comme
* COS(RADIANS(z.(x(property))))
avec quelque chose comme
* COS(RADIANS( select x(property) from mytable where id = z.id ))
Cependant, en y réfléchissant davantage, je pense que votre mytable
n'a pas la structure requise. En regardant le lien, je crois que votre mytable
devrait avoir une structure plus comme :
+-----------+----------------+
| Field | Type |
+-----------+----------------+
| id | Int(10) |
| latitude | Float |
| longitude | Float |
+-----------+----------------+
Pour que vous puissiez faire quelque chose comme
* COS(RADIANS(z.latitude))
REMARQUE
Ce qui précède était basé sur le fait que je ne comprenais pas que MySQL prend en charge les types de données spatiales (pour lesquels je ne sais pas comment utiliser)
Mettre à jour
Je viens de faire quelques recherches sur Google pour comprendre les types spatiaux et j'ai trouvé ceci :
ce qui suggère que vous ne pouvez pas faites ce que vous voulez faire avec les types de données spatiales dans mysql. Ce qui vous ramène donc à l'utilisation d'une manière non optimale de stocker les données dans mutable
Cependant, en relisant ce lien, les commentaires de la réponse suggèrent que vous pouvez désormais utiliser des types de données spatiales. (Je vous ai dit que je n'avais aucune idée ici) Cela signifierait remplacer le code de requête par des choses comme ST_Distance(g1,g2)
, ce qui signifie en fait une réécriture totale de l'exemple.
Autrement dit
mise à jour 2
Vous pouvez suivre trois chemins :
-
Nier que les types de données spatiales existent dans MySQL et utiliser une table qui a des colonnes explicites pour
lat
etlong
, et utilisez l'exemple de code tel qu'il a été écrit à l'origine sur ce blog. -
Adoptez les types de données spatiales MySQL (verrues et tout) et jetez un œil à des choses comme cette réponse https:/ /stackoverflow.com/a/21231960/31326 qui semblent faire ce que vous voulez directement avec les types de données spatiales, mais comme indiqué dans cette réponse, il y a quelques mises en garde.
-
Utilisez un type spatial pour stocker vos données et utilisez une
pre-query
pour extrairelat
etlong
avant de le passer dans l'exemple de code d'origine.