Mi sembra che tu stia presumendo che una volta selezionato z.id
nella query, che questo ti dia accesso diretto a x(property)
e y(property)
(A parte:quei nomi hanno davvero delle parentesi?)
Quindi a me sembra che dovresti sostituire cose come
* COS(RADIANS(z.(x(property))))
con qualcosa come
* COS(RADIANS( select x(property) from mytable where id = z.id ))
Tuttavia, a pensarci ulteriormente, penso che il tuo mytable
non ha la struttura richiesta Dal guardare il link, credo che il tuo mytable
dovrebbe avere una struttura più simile a:
+-----------+----------------+
| Field | Type |
+-----------+----------------+
| id | Int(10) |
| latitude | Float |
| longitude | Float |
+-----------+----------------+
In modo che tu possa fare qualcosa come
* COS(RADIANS(z.latitude))
NOTA
Quanto sopra si basava sul fatto che non capivo che MySQL supporta i tipi di dati spaziali (per i quali non ho idea di come utilizzarli)
Aggiorna
Ho appena cercato su Google per capire i tipi spaziali e ho trovato questo:
Come si utilizzano le query spaziali MySQL per trovare tutti i record nel raggio X? [chiuso]
il che suggerisce che non puoi fai quello che vuoi fare con i tipi di dati spaziali in mysql. Il che ti riporta quindi a utilizzare un modo non ottimale di archiviare i dati in mutable
Tuttavia, nel rileggere quel collegamento, i commenti alla risposta suggeriscono che ora potresti essere in grado di utilizzare i tipi di dati spaziali. (Te l'avevo detto che non ne avevo idea qui) Ciò significherebbe sostituire il codice della query con cose come ST_Distance(g1,g2)
, che in effetti significa riscrivere totalmente l'esempio.
Per dirla in altro modo
aggiornamento 2
Ci sono tre percorsi che puoi seguire:
-
Nega che i tipi di dati spaziali esistano in MySQL e usa una tabella che abbia colonne esplicite per
lat
elong
e utilizza il codice di esempio come originariamente scritto su quel blog. -
Abbraccia i tipi di dati spaziali MySQL (verruche e tutti) e dai un'occhiata a cose come questa risposta https:/ /stackoverflow.com/a/21231960/31326 che sembrano fare quello che vuoi direttamente con i tipi di dati spaziali, ma come notato in quella risposta ci sono alcuni avvertimenti.
-
Usa un tipo spaziale per conservare i tuoi dati e usa una
pre-query
per estrarrelat
elong
prima di passarlo nel codice di esempio originale.