Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

buscar si un numero "cae" dentro de un rango dado

Estas en el tema de buscar si un numero "cae" dentro de un rango dado en el foro de Mysql en Foros del Web. Hola, no se si se puede hacer lo sgte con MySQL: necesito poder crear una consulta que me diga si un numero en particular cae ...
  #1 (permalink)  
Antiguo 16/07/2010, 20:58
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 14 años, 8 meses
Puntos: 4
buscar si un numero "cae" dentro de un rango dado

Hola, no se si se puede hacer lo sgte con MySQL:

necesito poder crear una consulta que me diga si un numero en particular cae dentro de un rango de numeros, me explico un poco mejor a ver si alguien me echa una manito:

estoy tratando de crear un administrador de cuentas contables, tengo una tabla llamada Cuentas en la que almaceno lo sgte:

id | cuenta| descripcion |minimo|maximo
--------------------------------------------------
1 |6000|compras | 6001 | 6100
-------------------------------------------------
2 |7000|ventas | 7001 | 7200


en otra tabla llamada subcuentas tengo:

id | id_cuenta | subcuenta | descripcion
-------------------------------------------------
1 | 1 | 6001 | oficina
2 | 1 | 6002 | aseo
3 | 2 | 7100 | comestibles


en fin, son solo ejemplos :)

cuando agrego una cuenta me gustaria poder saber si el numero que estoy agregando a Cuentas no está "dentro" del rango de minimo y maximo de otra cuenta. por ejemplo si quisiera agregar la cuenta 7050 poder detectar que ya hay un rango ( en el ejemplo, la cuenta ventas) en que ya está definido ese numero, pero no se me ocurre como hacer la consulta con MySQL, incluso para cuando agrego una subcuenta me manie entero creando arreglos donde cargo las cuentas que ya existen y luego de unos bucles genero un rreglo con los numeros disponibles del rango que necesito. Me imagino habra una forma mejor y mas eficiente de hacer ambas cosa. cualquier luz será agredecida...
__________________
C[^L*]D
[email protected]
tokkaido.blogspot.com
No hay mejor forma de aprender que enseñar
  #2 (permalink)  
Antiguo 17/07/2010, 04:00
Avatar de chicho_  
Fecha de Ingreso: julio-2010
Mensajes: 44
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: buscar si un numero "cae" dentro de un rango dado

Código SQL:
Ver original
  1. SELECT COUNT(*)
  2. FROM cuenta
  3. WHERE minimo < 7050 AND maximo > 7050

Con esa query ya sabrías eso, no? Si te devuelve un resultado > 0 es que ya está dentro de un rango.
  #3 (permalink)  
Antiguo 17/07/2010, 06:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: buscar si un numero "cae" dentro de un rango dado

La cláusula [valor] BETWEEN [valor minimo] AND [valor maximo] permite comparar un rango cerrado de valores que incluye los valores límite.
Código MySQL:
Ver original
  1. SELECT S.id, S.id_cuenta, S.subcuenta, S.descripcion
  2. FROM cuenta C INNER JOIN subcuenta S ON C.id = S.id_cuenta
  3. WHERE S.subcuenta BETWEEN C.minimo AND C.maximo;
En caso de que se deba excluir lo límites, deberás entonces usar comparadores lógicos:

Código MySQL:
Ver original
  1. SELECT S.id, S.id_cuenta, S.subcuenta, S.descripcion
  2. FROM cuenta C INNER JOIN subcuenta S ON C.id = S.id_cuenta
  3. WHERE S.subcuenta > C.minimo AND S.subcuenta < C.maximo;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 17/07/2010, 20:01
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: buscar si un numero "cae" dentro de un rango dado

Excelente como siempre. muchas gracias por la ayuda prestada. habia pensado utilizar el between pero creí que solo me servia para valores que estuvieran en la tabla no si dentro de un "rango" de valores se tratara.

¿se puede utilizar lo mismo para determinar los valores no disponibles de un rango?

por ejemplo si mi rango es del 6001 al 6005 y ya tengo ocupados el 6001 y el 6005, por lo tanto tengo disponibles los sgtes:

6002
6003
6004

puedo obtener esos valores con una consulta? actualmente cargo los ocupados a un arreglo y luego cargo un segundo arreglo con el rango comparando su contenido con el primer arreglo, un poco rebuscado lo se, pero es la unica forma en que se me ocurrio hacerlo. funciona, el problema es que cuando sean una cantidad considerable de valores del rango tomará más tiempo hacerlo de esta manera, pienso.
__________________
C[^L*]D
[email protected]
tokkaido.blogspot.com
No hay mejor forma de aprender que enseñar
  #5 (permalink)  
Antiguo 18/07/2010, 04:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: buscar si un numero "cae" dentro de un rango dado

Imagina que en la tabla1 tienes todos los números (parece que sí cuentas con una tabla donde están todos los números que hay, donde está el campo que creo llamas subcuenta). Pues bien, con un left join puedes.

SELECT * FROM `tabla1` t1 LEFT JOIN `tabla2` t2 ON t1.numero = t2.numero WHERE (t1.numero between 600 AND 605) AND t2.numero IS NULL ORDER BY t2.numero
  #6 (permalink)  
Antiguo 20/07/2010, 06:48
 
Fecha de Ingreso: julio-2009
Mensajes: 90
Antigüedad: 14 años, 8 meses
Puntos: 4
Respuesta: buscar si un numero "cae" dentro de un rango dado

no, en la tabla subcuentas tengo solo aquellas del rango que ya estan "tomadas", pero se me ocurrió que si puedo lograr que MySql me genere una columna con los números del rango y luego esa columna la comparo con subcuentas podré hacer lo que necesito.
__________________
C[^L*]D
[email protected]
tokkaido.blogspot.com
No hay mejor forma de aprender que enseñar
  #7 (permalink)  
Antiguo 21/07/2010, 01:26
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: buscar si un numero "cae" dentro de un rango dado

Lo hagas así o con una hoja de cálculo y luego importando los datos en una tabla e indexando el campo, obtendrás lo que quieres. Lo mejor es tener esa tabla con todos los datos y eso te permitirá comparar con el left join...

Etiquetas: dado, numero, rango
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:15.