sql >> Databasteknik >  >> RDS >> Mysql

Behöver experthjälp för att lösa mindre förändringar i rumslig datafråga

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:

  1. Förneka att rumsliga datatyper finns i MySQL och använd en tabell som har explicita kolumner för lat och long , och använd exempelkoden som ursprungligen skrevs på den bloggen.

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

  3. Använd en rumslig typ för att lagra dina data och använd en pre-query för att extrahera lat och long innan du skickar den till den ursprungliga exempelkoden.



  1. Anslut till SQL Server med Windows-autentisering från en Linux-maskin via JDBC

  2. MySQL - Att kombinera INSERT, VALUES och SELECT?

  3. Söker efter de 5 platserna som ligger närmast ett postnummer – vilken väg ska jag gå?

  4. Välja en enda rad i MySQL