Zdá se mi, že předpokládáte, že jakmile vyberete z.id
v dotazu, že vám to dává přímý přístup k x(property)
a y(property)
(Pomineme-li ta jména opravdu mají v závorkách?)
Takže podle mě to vypadá, že byste měli nahradit věci jako
* COS(RADIANS(z.(x(property))))
s něčím jako
* COS(RADIANS( select x(property) from mytable where id = z.id ))
Nicméně při dalším přemýšlení si myslím, že vaše mytable
nemá požadovanou strukturu. Z pohledu na odkaz se domnívám, že vaše mytable
by měl mít strukturu spíše jako:
+-----------+----------------+
| Field | Type |
+-----------+----------------+
| id | Int(10) |
| latitude | Float |
| longitude | Float |
+-----------+----------------+
Abyste mohli udělat něco jako
* COS(RADIANS(z.latitude))
POZNÁMKA
Výše uvedené bylo založeno na tom, že jsem nepochopil, že MySQL podporuje typy prostorových dat (pro které netuším, jak je používat)
Aktualizovat
Jen jsem trochu googloval, abych porozuměl prostorovým typům, a našel jsem toto:
Jak používáte prostorové dotazy MySQL k vyhledání všech záznamů v okruhu X? [zavřeno]
což naznačuje, že nemůžete dělat, co chcete, s typy prostorových dat v mysql. Což vás přivádí zpět k používání neoptimálního způsobu ukládání dat v mutable
Při opětovném čtení tohoto odkazu však komentáře k odpovědi naznačují, že nyní můžete být schopni používat typy prostorových dat. (Řekl jsem vám, že zde nemám ponětí) To by znamenalo nahradit kód dotazu věcmi jako ST_Distance(g1,g2)
, což v podstatě znamená úplné přepsání příkladu.
Řečeno jinak
aktualizace 2
Existují tři cesty, kterými se můžete vydat:
-
Odmítněte existenci prostorových datových typů v MySQL a použijte tabulku, která má explicitní sloupce pro
lat
along
a použijte ukázkový kód, jak byl původně napsán na tomto blogu. -
Přijměte typy prostorových dat MySQL (bradavice a všechny) a podívejte se na věci jako tato odpověď https:/ /stackoverflow.com/a/21231960/31326 zdá se, že dělají to, co chcete, přímo s typy prostorových dat, ale jak je uvedeno v této odpovědi, existují určitá upozornění.
-
K uložení dat použijte prostorový typ a použijte
pre-query
extrahovatlat
along
před předáním do původního ukázkového kódu.