sql >> Database >  >> RDS >> Mysql

Query's om plaatsen binnen een bepaalde lat/lng . te vinden

We implementeren het min of meer zoals de onderstaande code (disclaimer:ik heb dit uit een bestand geknipt en de code verwijderd die niet relevant was voor het probleem in kwestie. Ik heb dit niet uitgevoerd, maar je zou in staat moeten zijn om het idee te krijgen.

$maxLat = $city->latitude + ($max_distance / 69); // 69 Miles/Degree
$minLat = $city->latitude - ($max_distance / 69);

$maxLon = $city->longitude + ($max_distance / (69.172 * cos($city->latitude * 0.0174533)));
$minLon = $city->longitude - ($max_distance / (69.172 * cos($city->latitude * 0.0174533)));

// Simplify terms to speed query
$originLatRadCos = cos($city->latitude * 0.0174533);
$originLatRadSin = sin($city->latitude * 0.0174533);
$originLonRad = $city->longitude * 0.0174533;

$city_distance_query = "
SELECT city_id, 
  3963 * acos(($originLatRadSin * sin( latitude * 0.0174533)) + 
  ($originLatRadCos * cos(latitude * 0.0174533) * cos((longitude * 0.0174533) -
  $originLonRad))) AS distanceFromOrigin
FROM cities
WHERE
 latitude < $maxLat AND latitude > $minLat AND longitude < $maxLon AND longitude > $minLon";

De rest van de vraag

SELECT cities.city_name, CityDistance.distanceFromOrigin,
FROM cities 
INNER JOIN ($city_distance_query) AS CityDistance ON CityDistance.city_id=cities.city_id
WHERE (distanceFromOrigin < $distance OR distanceFromOrigin IS NULL) 


  1. Hoe MySQL-tabelrecords in tweeën te splitsen om aan elke kant van een pagina weer te geven

  2. Hoe in te voegen in een tabel die een DEFAULT-waarde voor elke kolom specificeert?

  3. Waarom gebruikt MySQL hier niet altijd index merge?

  4. Kan ik de opgehaalde gegevens niet naar mijn socket.io-stream sturen?