Dans votre première requête, je crois que vous avez inversé les longitudes dans la soustraction. La loi sphérique des cosinus est :
d = acos(sin(lat1)*sin(lat2) + cos(lat1)*cos(lat2)*cos(long2−long1))*R
Si lat1 est remplacé par tblcity.latitude, long1 doit être remplacé par tblcity.longitude. Je pense que vous avez accidentellement remplacé long2 dans votre requête. Celui-ci fonctionne-t-il mieux ?
SELECT tblcity.city, tblcity.latitude, tblcity.longitude,
truncate((degrees(acos( sin(radians(tblcity.latitude))
* sin(radians(45.266708))
+ cos(radians(tblcity.latitude))
* cos(radians(45.266708))
* cos(radians(-73.616257 - tblcity.longitude) ) ) )
* 69.09*1.6),1) as distance
FROM tblcity HAVING distance < 10 ORDER BY distance desc
Je n'ai pas encore examiné votre deuxième requête, mais j'espère que cela vous aidera.