MySQL - recuperar datos de la consulta entre numeros

   
Vista:

recuperar datos de la consulta entre numeros

Publicado por Walter (4 intervenciones) el 28/04/2015 22:09:56
buenas tardes.-
tengo la siguiente estructura en mi tabla:
caja nro_inicial nro_final
1 499 501
2 501 502
3 500 503
4 497 499
y mi consulta es la siguiente:

SELECT * FROM mi_tabla
WHERE ((nro_inicial>="500" AND nro_inicial<="500") OR (nro_final>="500" AND nro_final<="500"))

pero solo me recupera los siguientes registros:
3 500 503
y cuando en realidad deberia de recuperar los siguientes valores, o es lo que yo quiero :
1 499 501
3 500 503
ya que el cod 1, tambien contiene los números del rango que estoy buscando.-
desde ya agradecido por sus respuestas.-
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

recuperar datos de la consulta entre numeros

Publicado por leonardo_josue (81 intervenciones) el 28/04/2015 22:35:36
Hola Walter:

En realidad no hay absolutamente nada malo en tu consulta... el cod 1 NO ESTÁ ENTRE EL RANGO DE VALORES QUE ESTÁS COLOCANDO... fijate bien, estás colocando esto:

1
nro_inicial>="500" AND nro_inicial<="500"

Esto en realidad ni siquiera es un rangó... sólo se cumple cuando nro_inicial es igual a 500...

499 ES MENOR O IGUAL A 500 pero con la primer parte te la condición, al colocar un AND, se hace falsa...

1
2
3
499 >= 500 AND 499 <= 500   esto se transforma en
 
falso AND verdadero, lo que es igual a FALSO...


lo mismo pasa con la segunda parte de la condición...

1
nro_final>="500" AND nro_final<="500"

el 501 SI ES MAYOR O IGUAL QUE 500, pero NO ES MENOR O IGUAL A 500, la única forma de que esto sea verdadero es que nro_final sea 500...

Revisa bien cuáles son tus rangos para que hagas correctamente las condiciones.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

recuperar datos de la consulta entre numeros

Publicado por Walter (4 intervenciones) el 28/04/2015 23:33:47
Muchas Gracias Leo Por tu respuesta, te explico que estoy trabajando en un sistema de administración de archivos, los datos de los contenedores de mis archivos los voy guardando en una tabla denominada como ejemplo caja_archivos, esta tabla contiene todos los datos(generalizando) de los documentos contenidos en ella, esta tabla consta de los siguientes campos:

nº de caja // nº identificatorio único en que debería de encontrarse el documento
sector/departamento // el sector de la empresa que lo remite
tipo // tipo de documento
fecha_ inicial // del documento
fecha_final // del documento
nº_inicial //
nº_final //

y lo que debo de hacer es consultar a esa tabla y saber en que caja debería estar el documento que estoy necesitando.
nº inicial y nº final maneja por ejemplo los rango de Documentos de identidad de una persona, por ejemplo necesito el DNI nº 500 en la consulta me debería de devolver en todas las cajas posibles en la cual debe de encontrase el documento, es por ello que el resultado debe de validar tambien los 2 rangos:

1 499 501 ---> aqui también me indica que se encuentra un documento que estoy necesitando
3 500 503 ----> aqui tambien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

recuperar datos de la consulta entre numeros

Publicado por leonardo_josue (81 intervenciones) el 29/04/2015 16:01:01
Hola de nuevo Walter:

Lo que necesitas entonces es cambiar tu condición, ya que está completamente equivocada, el valor del documento es el que debe estar entre el rango de nro_inicial y nro_final, puedes utilizar el operador BETWEEN, es más simple de entender...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> SELECT * FROM tabla;
+------+-------------+-----------+
| caja | nro_inicial | nro_final |
+------+-------------+-----------+
|    1 |         499 |       501 |
|    2 |         501 |       502 |
|    3 |         500 |       503 |
|    4 |         497 |       499 |
+------+-------------+-----------+
4 rows in set (0.00 sec)
 
mysql> SELECT *
    -> FROM tabla
    -> WHERE 500 BETWEEN nro_inicial AND nro_final;
+------+-------------+-----------+
| caja | nro_inicial | nro_final |
+------+-------------+-----------+
|    1 |         499 |       501 |
|    3 |         500 |       503 |
+------+-------------+-----------+
2 rows in set (0.00 sec)

o si prefieres hacerlo con condiciones estilo >= o <= debes ponerlo así:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT *
    -> FROM tabla
    -> WHERE nro_inicial <= 500 AND nro_final >= 500;
+------+-------------+-----------+
| caja | nro_inicial | nro_final |
+------+-------------+-----------+
|    1 |         499 |       501 |
|    3 |         500 |       503 |
+------+-------------+-----------+
2 rows in set (0.00 sec)

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

recuperar datos de la consulta entre numeros

Publicado por WALTER (4 intervenciones) el 29/04/2015 17:00:52
muchas gracias Leo, me sirvió bastante tu código y lo adapte al que estaba necesitando el cual quedo de esta manera ya que también debo de hacer búsquedas entre fechas:

SELECT * FROM vcajaubi WHERE CLICOD=60 AND TCOD="DES" AND STCOD="DES"
AND (("2014-04-06" BETWEEN FD AND FH)
OR ("2014-09-30" BETWEEN FD AND FH)
OR (FD BETWEEN "2014-04-06" AND "2014-09-30")
OR (FH BETWEEN "2014-04-06" AND "2014-09-30"))
AND obs LIKE '%CHACO%'

sos un capo ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar