Bonjour
J'essaie d'optimiser une requête SQL appelée un grand nombre de fois par un script :
1- Les coordonnées $coo sont converties en radians par php mais dans la table elles sont en d°Code:
1
2
3
4
5
6
7
8
9
10
11 // Renvoie la distance de la ville de nom $new la plus proche des latitude/longitude de $coo(['lat'],['lon']) function Get_Distance ($bdd, $coo, $new) { $coo['ville'] = $new; $req = $bdd->prepare ('SELECT 6371 * ACOS (SIN (RADIANS (latitude)) * SIN(:lat) + COS (RADIANS (latitude)) * COS (:lat) * COS (RADIANS (longitude) - :lon)) D FROM `fr` WHERE :ville LIKE VILLE ORDER BY D ASC LIMIT 1'); $req->execute($coo); // Restitution 1ère donnée $out = $req->fetch(PDO::FETCH_ASSOC); $req->closeCursor(); return intval($out['D']); }
Pour le 'RADIANS (latitude)' répété 2 fois on ne peut pas écrire 'COS (RADIANS (latitude) AS L)' au milieu du calcul, faut-il le pré-déclarer dans le select même si la valeur n'est pas renvoyée ?
2- Le résultat est une chaine et non un nombre (la partie entière me suffit d'où le 'intval')
3- Si c'était un nombre je suppose que MIN pourrait être utilisé à la place de 'ORDER BY D ASC LIMIT 1' (marche pas) ?
Enfin de façon générale faut-il partir du principe que SQL est plus rapide que php ??
Merci d'avance