Mysql
 sql >> Database >  >> RDS >> Mysql

Hai bisogno dell'aiuto di un esperto per risolvere piccoli cambiamenti nella query dei dati spaziali

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:

  1. Nega che i tipi di dati spaziali esistano in MySQL e usa una tabella che abbia colonne esplicite per lat e long e utilizza il codice di esempio come originariamente scritto su quel blog.

  2. 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.

  3. Usa un tipo spaziale per conservare i tuoi dati e usa una pre-query per estrarre lat e long prima di passarlo nel codice di esempio originale.