Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Potrzebujesz pomocy eksperta, aby rozwiązać drobne zmiany w zapytaniu o dane przestrzenne

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ć:

  1. Zaprzecz, że typy danych przestrzennych istnieją w MySQL i użyj tabeli, która ma wyraźne kolumny dla lat i long , i użyj przykładowego kodu, który został pierwotnie napisany na tym blogu.

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

  3. Użyj typu przestrzennego do przechowywania danych i użyj pre-query wyodrębnić lat i long przed przekazaniem go do oryginalnego przykładowego kodu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z wielu baz danych w aplikacji internetowej PHP?

  2. Jak poradzić sobie z błędem klucza obcego MySQL w PHP?

  3. Znaczenie WHERE 1 w zapytaniach MySQL

  4. MySQL grupuje wyniki według okresów

  5. Wybieraj bazy danych dynamicznie