PHP - Consulta a MySQL con BETWEEN

   
Vista:

Consulta a MySQL con BETWEEN

Publicado por siREZ (201 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
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder