2012-05-27 12 views
5

Ho un database denominato users con le colonne latitude e longitude, e voglio lavorare fuori gli utenti più vicine (utenti nella tabella users), che sono all'interno di un raggio di 50 km ad una certa latitudine e longitudine fornito da $_POST.Calcolare gli utenti più vicine MySQL

Puoi dirmi come potrei farlo? C'è una certa funzione matematica che deve essere utilizzata, o una funzione in MySQL come latitude_compare() o qualcosa del genere?

+2

possibile duplicato di [Proximity Search] (http://stackoverflow.com/questions/260335/proximity-search) –

risposta

2

Si può fare qualcosa di simile:

SELECT *, 

(ACOS((SIN(RADIANS(ref_latitude))*SIN(RADIANS(latitude))) + 
(COS(RADIANS(ref_latitude))*COS(RADIANS(latitude))*COS(RADIANS(longitude) 
-RADIANS(ref_longitude)))) * 6371) AS distance 

FROM table 
ORDER BY distance ASC 

Punto A: ref_latitude ref_longitude

Punto B: latitudine longitudine

mio Lat valori/Lon sono in gradi, come questo:

Dresda: 13.721067614 881400/51.060033646337900

1

Ecco un codice che ho utilizzato, questo è in miglia. Seleziona tutto il lat e il lng all'interno di un dato raggio.

$q = "SELECT * (3959 * acos(cos(radians($current_lat)) * cos(radians(lat)) * cos(radians(lng) - radians($current_lng)) + sin(radians($current_lat)) * sin(radians(lat)))) AS distance FROM users HAVING distance < $radius"; 
Problemi correlati