bonjour à tous,
j'ai 3 tables:
une table stages avec un champs id_lieu
une table lieux avec un champs id et un champs cp (code postal)
une table villes avec un champs c_p (code postal) et deux champs lat et lon (latitude et longitude)
si je veux afficher les stages ayant lieu dans le 92220:
jusqu'ici tout va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM stages WHERE id_lieu IN (SELECT id FROM lieux WHERE cp = '92220')
J'utilise cette requête pour connaitre les 10 villes les plus proches:
Vous me voyez venir, comment afficher non pas les stages ayant lieu dans les 10 villes les plus proches, mais plutôt, les 10 stages les plus proches!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT c_p,(6366*acos(cos(radians(".$LAT."))*cos(radians(`ep_villes`.`lat`))*cos(radians(`villes`.`lon`)-radians(".$LONG."))+sin(radians($LAT))*sin(radians(`villes`.`lat`)))) AS Proximite FROM villes ORDER BY Proximite LIMIT 1,10
ce qui serait la requête suivante:
qui bien sûr ne fonctionne pas pour au moins 3 raisons (plusieurs champs dans le select, le order et le limit)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT * FROM stages WHERE id_lieu IN (SELECT id FROM lieux WHERE cp IN ( SELECT c_p,(6366*acos(cos(radians(".$LAT."))*cos(radians(`ep_villes`.`lat`))*cos(radians(`villes`.`lon`)-radians(".$LONG."))+sin(radians($LAT))*sin(radians(`villes`.`lat`)))) AS Proximite FROM villes ORDER BY Proximite LIMIT 1,10 ) )
Toute aide sera la bienvenue
Merci d'avance
Partager