Det verkar för mig att du antar det när du väl har valt z.id
i frågan, att detta ger dig direkt tillgång till x(property)
och y(property)
(Bortsett från - har de namnen verkligen parenteser?)
Så för mig ser det ut som att du borde byta ut saker som
* COS(RADIANS(z.(x(property))))
med något liknande
* COS(RADIANS( select x(property) from mytable where id = z.id ))
Men när jag tänker vidare på det tror jag att din mytable
har inte den struktur som krävs. Från att titta på länken tror jag att din mytable
bör ha en struktur mer som:
+-----------+----------------+
| Field | Type |
+-----------+----------------+
| id | Int(10) |
| latitude | Float |
| longitude | Float |
+-----------+----------------+
Så att du kan göra något liknande
* COS(RADIANS(z.latitude))
OBS
Ovanstående baserades på att jag inte förstod att MySQL stöder rumsliga datatyper (som jag inte har någon aning om hur man använder)
Uppdatera
Jag googlade bara lite för att förstå de rumsliga typerna och hittade detta:
Hur använder du MySQL rumsliga frågor för att hitta alla poster i X-radie? [stängd]
vilket tyder på att du inte kan gör vad du vill göra med rumsliga datatyper i mysql. Vilket därmed tar dig tillbaka till att använda ett icke-optimalt sätt att lagra data i mutable
Men när du läser den länken igen, tyder kommentarerna till svaret på att du nu kanske kan använda rumsliga datatyper. (Jag sa att jag inte hade en aning här) Detta skulle innebära att frågekoden ersätts med saker som ST_Distance(g1,g2)
, vilket i praktiken innebär att man helt och hållet skriver om exemplet.
För att uttrycka det på ett annat sätt
uppdatering 2
Det finns tre vägar du kan följa:
-
Förneka att rumsliga datatyper finns i MySQL och använd en tabell som har explicita kolumner för
lat
ochlong
, och använd exempelkoden som ursprungligen skrevs på den bloggen. -
Omfamna MySQL rumsliga datatyper (vårtor och allt) och ta en titt på saker som det här svaret https:/ /stackoverflow.com/a/21231960/31326 som verkar göra vad du vill direkt med rumsliga datatyper, men som nämnts i det svaret finns det några varningar.
-
Använd en rumslig typ för att lagra dina data och använd en
pre-query
för att extraheralat
ochlong
innan du skickar den till den ursprungliga exempelkoden.