![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 2 Dołączył: 1.07.2009 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam w bazie miasta z podanymi lat i lng i chciałbym na podstawie danej pozycji lat lng sprawdzić najbliższe miasta i obliczyć ile w danej odległości jest kilometrów.
Co chcę uzyskać? Mam tak: 1. Podaje do zapytania SQL moje pozycje (np. lat: 53.1351082 lng: 17.90514870000004) 2. W bazie wszystkie miasta mają swoją pozycję lat i lng i chcę by mi wyświetliło X miast tylko najbliższych do podanej pozycji. 3. Policzenie odległości km ile do danego miasta jest od podanej pozycji w linii prostej. Zapewne trzeba użyć jakiś specyficznych funkcji MySQL ale niestety nie wiem jak się za to zabrać i jakie funkcję mi pomogą. Liczę na waszą pomoc. Ten post edytował Robert007 18.02.2016, 10:56:41 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 2 Dołączył: 1.07.2009 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Wydaję mi się że działa poprawnie, wrzucam poniżej rozwiązanie:
W razie nie będzie działać jak powinno to napiszę Tutaj. Dzięki! |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Na pewno nie HAVING, warunek powinien być w WHERE.
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 2 Dołączył: 1.07.2009 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jest błąd SQL wtedy jak dam AND zamiast HAVING, w ogóle co to za liczba 6371? Bo tam nie wiem czy trzeba coś podstawić.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Trzeba przenieść obliczenie do WHERE, wtedy bez ORDER tak:
lub z ORDER:
Cytat var R = 6371; // Radius of the earth in km
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 2 Dołączył: 1.07.2009 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
OK czyli przykład z "lub z ORDER:" rozumiem że jest optymalniejszy i może nie generuje tabeli tymczasowej?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Raczej bez ORDER jest optymalniejszy i trudniej o błąd w składni obliczeń. Sortować wtedy można już bezpośrednio w kodzie, po pobraniu danych.
Sprawdź sobie optymalność poprzez EXPLAIN. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 14:03 |