Hi Anthony,
'As Miles' just names that column in the output, and if you want to retrieve
locations within a radius, you need that name, eg
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.name = 'New York' AND loc2.name <>
'New York'
HAVING MILES < 200;
'Havng' is slow, so if such queries are frequent, for speed you probably
will want to pre-populate something like
CREATE TABLE distances (
int from_id NOT NULL,
int to_id NOT NULL;
double distance NOT NULL )
with results of the above query for all combinations of locations taken two
at a time. If there are 10,000 rows in locations, distances will have about
50 million pre-computed distances.
HTH
PB
-----
----- Original Message -----
From: Anthony Ward
To: Peter Brawley ; [EMAIL PROTECTED]
Sent: Wednesday, June 04, 2003 5:02 AM
Subject: Re: efficient query or not?
Hi,
You mention this
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
the only problems is that I have tremendous problem understanding AS,
I think it is creating a "virtual" column name called Miles.
Also, if i search people that are about 100miles or XXmiles away from me,
how do i check that because
I don't understand the use of loc1.id=1 and loc2.id=2
Thanx for the help.
Anthony
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED]