Mysql
 sql >> база данни >  >> RDS >> Mysql

Нуждаете се от експертна помощ за решаване на незначителни промени в заявката за пространствени данни

Струва ми се, че предполагате, че след като сте избрали z.id в заявката, че това ви дава директен достъп до x(property) и y(property)

(Настрана – наистина ли тези имена имат скоби?)

Така че според мен изглежда, че трябва да замените неща като

* COS(RADIANS(z.(x(property))))

с нещо като

* COS(RADIANS( select x(property) from mytable where id = z.id ))

Въпреки това, като се замисля по-нататък, мисля, че вашата mytable няма необходимата структура. Като гледам връзката, вярвам, че вашата mytable трябва да има структура, по-скоро като:

+-----------+----------------+
| Field     |    Type        |
+-----------+----------------+
|  id       |        Int(10) |
| latitude  |        Float   |
| longitude |        Float   |
+-----------+----------------+

За да можете да направите нещо като

* COS(RADIANS(z.latitude))

ЗАБЕЛЕЖКА

Горното се основава на това, че не разбирам, че MySQL поддържа типове пространствени данни (за които нямам представа как да използвам)

Актуализиране

Просто потърсих в Google, за да разбера пространствените типове и открих това:

Как използвате MySQL пространствени заявки, за да намерите всички записи в X радиус? [затворено]

което предполага, че не можете направете това, което искате да правите с типове пространствени данни в mysql. Което по този начин ви връща към използването на неоптимален начин за съхранение на данни в mutable

Въпреки това при повторно четене на тази връзка коментарите към отговора предполагат, че вече може да можете да използвате типове пространствени данни. (Казах ви, че нямам представа тук) Това би означавало замяна на кода на заявката с неща като ST_Distance(g1,g2) , което на практика означава пълно пренаписване на примера.

Казано по друг начин

актуализация 2

Има три пътя, които можете да следвате:

  1. Откажете, че в MySQL съществуват типове пространствени данни и използвайте таблица, която има изрични колони за lat и long , и използвайте примерния код, както първоначално е написано в този блог.

  2. Прегърнете типовете пространствени данни на MySQL (брадавици и всичко останало) и разгледайте неща като този отговор https:/ /stackoverflow.com/a/21231960/31326 които изглежда правят това, което искате директно с типове пространствени данни, но както е отбелязано в този отговор, има някои предупреждения.

  3. Използвайте пространствен тип, за да съхранявате данните си, и използвайте pre-query за извличане на lat и long преди да го прехвърлите в оригиналния примерен код.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Запазете кодирано изображение с base64 в база данни от страна на сървъра като BLOB

  2. Сортиране по някаква колона, а също и по rand() в MySQL

  3. Как да инсталирам (L|M)AMP стека на iPhone?

  4. Как да разбера дали моята таблица е MyISAM или Innodb

  5. условно присъединяване в mysql