I’ve create two custom fields for my users:
latitude
longitude
Here’s my code. I think I’m close:
$user_query = $wpdb->get_results(
"
SELECT
u.ID,
u.user_login,
latitude.meta_value,
longitude.meta_value,
( 3959 * acos( cos( radians( $lat ) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians( $lng ) ) + sin( radians( $lat ) ) * sin( radians( latitude ) ) ) ) AS distance
FROM $wpdb->users u
LEFT JOIN $wpdb->usermeta AS latitude on latitude.user_id = u.ID and latitude.meta_key = 'latitude'
LEFT JOIN $wpdb->usermeta AS longitude on longitude.user_id = u.ID and longitude.meta_key = 'longitude'
HAVING
distance < $radius
ORDER BY
distance
LIMIT
0, 20
"
);