2011-06-08 6 views
0

Bonjour, J'ai trouvé cet article qui est utile mais malheureusement je n'arrive pas à le faire fonctionner.PHP MySQL plus proche du code postal

http://davidsimpson.me/2008/09/28/find-nearest-store-page-using-php-mysql-and-google-maps/

J'ai une liste des magasins dans une table MySQL avec le code postal, la longitude, la latitude et diverses autres informations spécifiques du magasin. Je souhaite que l'utilisateur puisse entrer son code postal sur un formulaire, spécifier une distance maximale en miles (c'est-à-dire un menu déroulant, dans un rayon de 10 miles, dans un rayon de 20 miles, etc.), puis pour les résultats tiré dans l'ordre de la base de données MySQL.

Quelqu'un peut-il nous éclairer là-dessus?

Cordialement

Répondre

0

Eh bien, il donne clairement comment obtenir les miles, donc tout ce que vous devez avoir l'aide de votre chute est en baisse « Avoir miles < {} dropdownvalue » ajoutés à votre instruction SQL. Donc, si vous avez 10 miles, il a des miles < 10 etc.

+0

Si vous regardez l'instruction SQL initiale, elle contient $ longitude et $ latitude, mais ces variables PHP n'ont pas de valeur au préalable. Ai-je manqué quelque chose ou est-ce que l'exemple de code PHP est incomplet ...? – Rob

+0

J'ai eu l'impression que c'était la longitude, et la latitude de l'emplacement des utilisateurs, de sa formule expliquée en haut. – BugFinder

2

Alors que l'approche proposée dans cet exemple fonctionne, il doit calculer la distance pour chaque ligne dans la table. C'est tout simplement trop inefficace pour travailler à l'échelle. Jetez un oeil à this tutorial. Il utilise des types de données spéciaux dans MySQL pour les coordonnées et peut chercher très rapidement. Il devrait vous donner une base pour commencer.

Votre solution peut être encore plus simple. Il va falloir une liste de tous les codes postaux et aussi une liste de tous les magasins. Comme toutes vos entrées et sorties sont des facteurs connus, vous pouvez les calculer dans des tables "cache" qui vous donneront des résultats très rapides. Créer une table appelée StoreDistances10Miles (devinettes sur les types de données et les conventions de nommage):

postcode CHAR(8) INDEXED, store_id INT(8), metresAway INT(8) 

itérer sur chaque code postal, trier les magasins par la distance et sauver ceux à moins de 10 miles dans la table. Maintenant, quand vous voulez faire une recherche par code postal, recherchez simplement StoreDistances10Miles par code postal et vous aurez votre liste. Assurez-vous d'indexer postcode.

Vous devrez reproduire une table pour chaque distance que vous souhaitez offrir sur votre site.

Questions connexes