select within 20 kilometers based on latitude/longitude select within 20 kilometers based on latitude/longitude mysql mysql

select within 20 kilometers based on latitude/longitude


SELECT  *FROM    mytable mJOIN    mytable mnON      ACOS(COS(RADIANS(m.latitude)) * COS(RADIANS(mn.latitude)) * COS(RADIANS(mn.longitude) - RADIANS(m.longitude)) + SIN(RADIANS(m.latitude)) * SIN(radians(mn.latitude))) <= 20 / 6371.0WHERE   m.name = 'grey river'

If your table is MyISAM you may want to store your points in a native geometry format and create a SPATIAL index on it:

ALTER TABLE mytable ADD position POINT;UPDATE  mytableSET     position = POINT(latitude, longitude);ALTER TABLE mytable MODIFY position NOT NULL;CREATE SPATIAL INDEX sx_mytable_position ON mytable (position);SELECT  *FROM    mytable mJOIN    mytable mnON      MBRContains                (                LineString                        (                        Point                                (                                X(m.position) - 0.009 * 20,                                Y(m.position) - 0.009 * 20 / COS(RADIANS(X(m.position)))                                ),                        Point                                (                                X(m.position) + 0.009 * 20,                                Y(m.position) + 0.009 * 20 / COS(RADIANS(X(m.position))                                )                        ),                mn.position                )        AND ACOS(COS(RADIANS(m.latitude)) * COS(RADIANS(mn.latitude)) * COS(RADIANS(mn.longitude) - RADIANS(m.longitude)) + SIN(RADIANS(m.latitude)) * SIN(radians(mn.latitude))) <= 20 / 6371.0WHERE   m.name = 'grey river'


SELECT `s`.suburb_id,`s`.suburb_name,`s`.lat,`s`.long, (((acos(sin(($lat*pi()/180)) * sin((s.lat*pi()/180))+cos(($lat*pi()/180)) * cos((s.lat*pi()/180)) * cos((($long - s.long)*pi()/180))))*180/pi())*60*1.1515*1.609344) AS distance FROM (`mst_suburbs` as s) HAVING distance <= 20 ORDER BY `s`.suburb_id DESC

This query works for me to get all the lat,long between 12 km distance.I have mst_suburbs is may table which having the lat and long column.$lat and $long are my two php variable .and I am passing the desired lat,long to get the nearest 12km lat long list from the mst_suburb. You just need to change the name of the column according to your table and pass the lat,long to query.