Consulta a MySQL con BETWEEN
Publicado por siREZ (203 intervenciones) el 10/05/2016 22:52:53
Cordial saludo.
tengo la siguiente funcion para calcular Lat y Lon minima y máxima y funciona perfecto, obteniendo valores que requiero para mi consulta
los resultados son:
latitud: 6.157843093922652
Longitud: -75.59155124401474
minima latitud: 6.0499245012124
max latitud: 6.2657616866329
Minima Long.... 75.483006366025
Max Longitud: 75.700096122004
distance: 12
ahora bien. Realizo la siguiente consulta y no obtengo resultados, aunque analizando la tabla SI hay datos que encajan en el marco de mi consulta, con longitud y latitud dentro de los valores min y max dados por la funcion en un radio de 12 KM.
mi consulta es:
la tabla es: ejemplo
variables: lat y lon
distance: es un parametro fijo. en este caso 12
si le quito el WHERE funciona bien...
Donde puede estar el error?
gracias.
siREZ
tengo la siguiente funcion para calcular Lat y Lon minima y máxima y funciona perfecto, obteniendo valores que requiero para mi consulta
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
function getBoundaries($lat, $lng, $distance = 1, $earthRadius = 6371)
{
$return = array();
// Los angulos para cada dirección
$cardinalCoords = array('north' => '0',
'south' => '180',
'east' => '90',
'west' => '270');
$rLat = deg2rad($lat);
$rLng = deg2rad($lng);
$rAngDist = $distance/$earthRadius;
foreach ($cardinalCoords as $name => $angle)
{
$rAngle = deg2rad($angle);
$rLatB = asin(sin($rLat) * cos($rAngDist) + cos($rLat) * sin($rAngDist) * cos($rAngle));
$rLonB = $rLng + atan2(sin($rAngle) * sin($rAngDist) * cos($rLat), cos($rAngDist) - sin($rLat) * sin($rLatB));
$return[$name] = array('lat' => (float) rad2deg($rLatB),
'lng' => (float) rad2deg($rLonB));
}
return array('min_lat' => $return['south']['lat'],
'max_lat' => $return['north']['lat'],
'min_lng' => $return['west']['lng'],
'max_lng' => $return['east']['lng']);
}
$distance = 12; // Sitios que se encuentren en un radio de 1KM
$box = getBoundaries($lat, $lng, $distance);
echo "<br>minima latitud: ";
echo $box['min_lat'];
echo "<br>max latitud: ";
echo $box['max_lat'];
echo "<br>Minima Long.... ";
echo $box['min_lng'];
echo "<br>Max Longitud: ";
echo $box['max_lng'];
echo "<br>distance: ";
echo $distance;
?>
los resultados son:
latitud: 6.157843093922652
Longitud: -75.59155124401474
minima latitud: 6.0499245012124
max latitud: 6.2657616866329
Minima Long.... 75.483006366025
Max Longitud: 75.700096122004
distance: 12
ahora bien. Realizo la siguiente consulta y no obtengo resultados, aunque analizando la tabla SI hay datos que encajan en el marco de mi consulta, con longitud y latitud dentro de los valores min y max dados por la funcion en un radio de 12 KM.
mi consulta es:
1
2
3
4
5
6
7
8
9
10
11
12
13
$squery = ('SELECT *, (6371 * ACOS(
SIN(RADIANS(lat))
* SIN(RADIANS(' . $lat . '))
+ COS(RADIANS(lng - ' . $lng . '))
* COS(RADIANS(lat))
* COS(RADIANS(' . $lat . '))
)
) AS distance
FROM ejemplo
WHERE (lat BETWEEN ' . $box['min_lat']. ' AND ' . $box['max_lat'] . ')
AND (lon BETWEEN ' . $box['min_lng']. ' AND ' . $box['max_lng']. ')
HAVING distance <= ' . $distance . '
ORDER BY distance ASC ');
la tabla es: ejemplo
variables: lat y lon
distance: es un parametro fijo. en este caso 12
si le quito el WHERE funciona bien...
Donde puede estar el error?
gracias.
siREZ
Valora esta pregunta


0