2010-06-28 22 views
5

Estoy buscando una consulta SQLite que devolverá valores que son grandes o menores que 0.014763 para el lng y 0.008830 para el lat. Estoy usando el siguiente código ...Ayuda con una consulta SQL

$latupp = $_REQUEST['currlat'] + 0.008830; 
$latlow = $_REQUEST['currlat'] - 0.008830; 
$lngupp = $_REQUEST['currlng'] + 0.014763; 
$lnglow = $_REQUEST['currlng'] - 0.014763; 
$q=mysql_query("SELECT * FROM `tweets` 
         WHERE `lat` > $latlow AND 
          `lat` < $latupp OR 
          `lng` > $lnglow AND 
          `lng` < $lngupp;") or die(mysql_error()); 

pero es devolver resultados incorrectos por ejemplo los resultados de mayor o menor que 0,1441209. No puedo entender por qué. ¿Alguien tiene alguna sugerencia?

+0

¿Cómo ha definido "lat" en la base de datos - se ve como un problema de punto flotante de precisión. –

+0

Sí, tanto 'lat' como 'lng' son campos en la base de datos – Skizit

Respuesta

7

Tal vez ...

$q=mysql_query("SELECT * FROM `tweets` 
         WHERE `lat` > $latlow AND 
          `lat` < $latupp AND 
          `lng` > $lnglow AND 
          `lng` < $lngupp;") or die(mysql_error()); 
+0

¡Esto parece haber funcionado! ¡¡Gracias!! – Skizit

0

probar esto.

$q=mysql_query("SELECT * FROM `tweets` 
         WHERE `lat` >". $latlow. "AND 
          `lat` <". $latupp. "OR 
          `lng` >". $lnglow. "AND 
          `lng` <". $lngupp.";") 
+0

No funcionó, ¡gracias por el esfuerzo! – Skizit

+0

Es posible que esté relacionado con la prioridad de uso de palabras clave AND/O. Los usas con paréntesis – onurbaysan

5

que debería funcionar:

$latupp = $_REQUEST['currlat'] + 0.008830; 
$latlow = $_REQUEST['currlat'] - 0.008830; 
$lngupp = $_REQUEST['currlng'] + 0.014763; 
$lnglow = $_REQUEST['currlng'] - 0.014763; 
$q=mysql_query("SELECT * FROM `tweets` 
         WHERE `lat` BETWEEN $latlow AND $latupp 
          AND 
          `lng` BETWEEN $lnglow AND $lngupp;") or die(mysql_error()); 

Tal vez necesita paréntesis para separar la primera y segunda parte (No se puede probar aquí).

Ha cometido un pequeño error al conectar el lat y la restricción larga con un "O". Su comando dice:

Dame todos los registros que tienen:

  • un valor de latitud mayor que $ latlow Y inferior a $ latupp, no importa lo valor de tiempo ha conseguido

O

  • un valor mucho mayor que $ lnglow Y inferior a $ lngupp no ​​importa lo lat valor que tiene

O AMBOS

Cuestiones relacionadas