MySQL distance and min with group by
===

I have the following query:

    SELECT TeacherLocation.user_id, TeacherLocation.city, TeacherLocation.state_id, 
    TeacherLocation.latitude, TeacherLocation.longitude,	

    3959 * acos( cos( radians(40.76332092) ) * cos( radians( TeacherLocation.latitude ) )* 
    cos( radians( 	TeacherLocation.longitude ) - radians(-73.98623657) ) + sin(       
    radians(40.76332092) ) * 
    sin( radians( TeacherLocation.latitude ) )  ) AS distance 

    FROM teacher_locations AS TeacherLocation

    GROUP BY TeacherLocation.user_id
    HAVING distance > 0
    ORDER BY distance ASC LIMIT 0, 100

This appears to be working fine but the problem I'm having is that since I'm grouping by user_id, and there and that user_id isn't unique in the table, I might and do get the closest distance, but not always the city and state_id of that distance (since there are multiple). Results:

    user_id     city            stateId Lat             Long            Distance
    83224	NEW YORK	33	40.751091	-73.99469757	0.954064642293979
    87336	NEW YORK	33	40.751091	-73.99469757	0.954064642293979
    87850	NEW YORK	33	40.751091	-73.99469757	0.954064642293979
    86822	NEW YORK	33	40.751091	-73.99469757	0.954064642293979

If I add min (distance) I get weird results. Why?