Wydaje mi się, że zakładasz, że po wybraniu z.id
w zapytaniu, że daje to bezpośredni dostęp do x(property)
i y(property)
(Poza tym, czy te nazwy naprawdę mają w sobie nawiasy?)
Wygląda więc na to, że powinieneś wymienić takie rzeczy jak
* COS(RADIANS(z.(x(property))))
z czymś takim jak
* COS(RADIANS( select x(property) from mytable where id = z.id ))
Jednak zastanawiając się nad tym, myślę, że Twój mytable
nie ma wymaganej struktury. Patrząc na link, uważam, że Twój mytable
powinien mieć strukturę bardziej podobną do:
+-----------+----------------+
| Field | Type |
+-----------+----------------+
| id | Int(10) |
| latitude | Float |
| longitude | Float |
+-----------+----------------+
Abyś mógł zrobić coś takiego
* COS(RADIANS(z.latitude))
UWAGA
Powyższe opierało się na tym, że nie zrozumiałem, że MySQL obsługuje typy danych przestrzennych (dla których nie mam pojęcia, jak używać)
Aktualizacja
Właśnie poszukałem w Google, aby zrozumieć typy przestrzenne i znalazłem to:
Jak używać zapytań przestrzennych MySQL, aby znaleźć wszystkie rekordy w promieniu X? [zamknięte]
co sugeruje, że nie możesz rób to, co chcesz zrobić z typami danych przestrzennych w mysql. Co w ten sposób sprowadza cię z powrotem do używania nieoptymalnego sposobu przechowywania danych w mutable
Jednak po ponownym przeczytaniu tego linku komentarze do odpowiedzi sugerują, że możesz teraz korzystać z typów danych przestrzennych. (Powiedziałem ci, że nie mam tutaj pojęcia) Oznaczałoby to zastąpienie kodu zapytania takimi rzeczami jak ST_Distance(g1,g2)
, co w praktyce oznacza całkowite przepisanie przykładu.
Innymi słowy
aktualizacja 2
Istnieją trzy ścieżki, którymi możesz podążać:
-
Zaprzecz, że typy danych przestrzennych istnieją w MySQL i użyj tabeli, która ma wyraźne kolumny dla
lat
ilong
, i użyj przykładowego kodu, który został pierwotnie napisany na tym blogu. -
Zapoznaj się z przestrzennymi typami danych MySQL (brodawkami i innymi) i spójrz na takie rzeczy jak ta odpowiedź https:/ /stackoverflow.com/a/21231960/31326 które wydają się robić to, co chcesz, bezpośrednio z typami danych przestrzennych, ale jak wspomniano w tej odpowiedzi, są pewne zastrzeżenia.
-
Użyj typu przestrzennego do przechowywania danych i użyj
pre-query
wyodrębnićlat
ilong
przed przekazaniem go do oryginalnego przykładowego kodu.