Anthony, As Bruce noted, you can greatly improve efficiency by using a WHERE clause, but as you may be quoting a first formula I posted 'from first principles', but which gives inaccurate results, I ought to correct it. Here is a much more accurate formula for distance in miles...
3963 * acos(cos(radians(90-lat1)) * cos(radians(90-lat2)) + sin(radians(90-lat1)) * sin(radians(90-lat2)) * cos(radians(lon1-lon2))) (note: you can also find estimates of the earth's radius of 3959 and 3955) Given a table named locations with a bit of data ... CREATE TABLE locations ( id int(10) unsigned NOT NULL auto_increment, name char(20) NOT NULL default '', lat double NOT NULL default '0', lon double NOT NULL default '0', PRIMARY KEY (`id`) ); INSERT INTO locations VALUES (0,'New York', 40.7695, -73.9512), (0,'Boston', 42.3512, -71.0536), (0,'San Francisco', 37.775, -122.417), (0,'San Diego', 32.815, -117.136); (note: lat and lon are in decimal degrees) then this query, using the above formula SELECT loc1.name, loc1.lat, loc1.lon, loc2.name, loc2.lat, loc2.lon, 3963 * acos(cos(radians(90-loc1.lat)) * cos(radians(90-loc2.lat)) + sin(radians(90-loc1.lat)) * sin(radians(90-loc2.lat)) * cos(radians(loc1.lon-loc2.lon))) AS Miles FROM locations AS loc1 INNER JOIN locations AS loc2 ON loc1.id = 1 AND loc2.id = 2 gives pretty good results. HTH PB ----- Hi, I need to calculate distance from a point and for the select statment I have this SELECT userid FROM place WHERE acos( cos($longitude) * cos($latitude) * cos(place.latitude) *cos(place.longitude) +cos($longitude) * sin($latitude) * cos(place.latitude) * sin(place.longitude) +sin($longitude) * sin($latitude) ) * 3963 <= 1000); Would you consider this HORRIBLY inefficient or GOOD. if it is horrible how can i make it efficient? Anthony -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]