/ / Code postal Radius Search - php, mysql, code postal

Recherche de code postal - php, mysql, code postal

Ok, alors on m'a demandé de créer une recherche de code postalscénario. Je suis encore assez nouveau pour les php / mysql plus avancés. Tout ce dont j'ai besoin, c'est de l'aide pour simplifier ce script. La base de données de codes postaux est constituée de la totalité de la base de données sql du code postal du Royaume-Uni, contenant 1,3 million de lignes. Donc, lorsque j’utilise le script pour obtenir tous les codes postaux dans un rayon, cela prend beaucoup de temps. Y at-il un moyen de le simplifier? Peut-être même utiliser Java / Ajax?

<?php

$postcode = str_replace( "+", "%20", $postcode );
$postcode = str_replace( "!"£$^&*()?<>", "", $postcode );

include ("config.php");

$sqlstring = "SELECT * FROM postcodelatlng WHERE postcode LIKE "".$postcode." %" ";
$result = mysql_query($sqlstring);

$row = mysql_fetch_assoc($result);

$lng = $row["longitude"] / 180 * M_PI;
$lat = $row["latitude"] / 180 * M_PI;

mysql_free_result($result);

$sqlstring2 = "SELECT DISTINCT
postcodelatlng.postcode,
(
6367.41 * SQRT(
2 * (
1- COS(RADIANS(postcodelatlng.latitude)) * COS(".$lat.") * (
SIN(RADIANS(postcodelatlng.longitude)) * SIN(".$lng.") + COS(RADIANS(postcodelatlng.longitude)) * COS(".$lng.")
) - SIN(RADIANS(postcodelatlng.latitude)) * SIN(".$lat.")
)
)
) AS Distance
FROM
postcodelatlng AS postcodelatlng
HAVING Distance <= "".$radius.""
ORDER BY Distance ";



$result1 = mysql_query($sqlstring2) or die("query failed: " . mysql_error());
while($row = mysql_fetch_array($result1)){
$searchlets = "SELECT * FROM property_details WHERE postcode = "".$row["postcode"]."" ";
$getresult = mysql_query($searchlets);
while($row2 = mysql_fetch_array($getresult)) {

echo " Output here if Just Postcode was used ";

echo "<hr/>";
}


}

// This seraches if only city name was used
$searchlets2 = "SELECT * FROM property_details WHERE street = "".$postcode."" ";
$getresult2 = mysql_query($searchlets2);
while($row3 = mysql_fetch_array($getresult2)) {
echo " Output Here If just city name was searched ";

echo "<hr/>";
}

mysql_close($con);

?>

Réponses:

2 pour la réponse № 1

Vous pouvez essayer un cadre de sélection pour filtrer larésultats. Ensuite, vous pouvez utiliser la formule de harvesine pour une meilleure précision. Ou vous pouvez essayer une clé quadkey, un.k.a comme une courbe remplissant l'espace. Fondamentalement, c’est un index spatial qui réduit la dimension. C’est un algorithme LSH. Lisez ma réponse à cette question:Recherche géographique (distance) en PHP / MySQL (Performance)