J'ai une table de base de données avec une liste de restaurants, y compris leurs noms, latitudes et longitudes. Je voudrais sélectionner tous les restaurants qui sont à une certaine distance de mon emplacement actuel. l'emplacement actuel est déterminé dans le fichier php (en ce moment je suis en train d'utiliser un lat statique & lng). J'ai trouvé le code pour calculer la distance:sélectionnez les entrées de la table de restaurant à une certaine distance de l'emplacement actuel en utilisant php
function findDist($lat, $lng){
$currLat = 33.777563;
$currLng = -84.389959;
$currLat = deg2rad ($currLat);
$sincurrLat = sin ($currLat);
$lat = deg2rad ($lat);
$currLng = deg2rad ($currLng);
$lng = deg2rad ($lng);
return round((7926 - 26 * $sincurrLat) * asin (min (1, 0.707106781186548 * sqrt ((1 - (sin ($lat) * $sincurrLat) - cos ($currLat) * cos ($lat) * cos ($lng - $currLng))))),4);
}
mais comment l'incorporer dans ma requête de sélection? J'ai essayé ceci:
$query = "SELECT *
FROM
eateries E
WHERE
EXISTS
(
SELECT *
FROM
eateries_hours EH, eateries_type ET
WHERE
EH.eateries_id = E.id AND ET.eateries_id = E.id
AND findDist(E.lat, E.lng) <= .5
)";
mais bien sûr, cela ne fonctionne pas parce qu'il est de ne pas reconnaître la fonction. puis-je faire une requête séparée juste pour lats et lngs au début, calculer les distances, puis rejoindre cela avec la question ci-dessus en quelque sorte? des idées?
merci.
Vous devriez vraiment regarder le composant MySQL Spatial, sauf si vous aimez réinventer la roue. –