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

[SOLUCIONADO] Rango de búsqueda a una consulta

Estas en el tema de Rango de búsqueda a una consulta en el foro de Bases de Datos General en Foros del Web. Hola buenas, Les planteo una duda que me apareció. Tengo una tabla donde guardo Nombre, edad, sexo de pacientes (lo típico de una tabla usuario). ...
  #1 (permalink)  
Antiguo 17/11/2013, 22:03
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Rango de búsqueda a una consulta

Hola buenas,

Les planteo una duda que me apareció.

Tengo una tabla donde guardo Nombre, edad, sexo de pacientes (lo típico de una tabla usuario).
De esta tabla muestro la información de edad de cada paciente, lo hago con esta consulta
Código MySQL:
Ver original
  1. SELECT pac_rut, pac_nombre, pac_sexo, MONTH( CURDATE( ) ) - MONTH( pac_fechanac ) +12 * IF( MONTH( CURDATE( ) ) < MONTH( pac_fechanac ) , 1, IF( MONTH( CURDATE( ) ) = MONTH( pac_fechanac ) , IF( DAY( CURDATE( ) ) < DAY( pac_fechanac ) , 1, 0 ) , 0 ) ) - IF( MONTH( CURDATE( ) ) <> MONTH( pac_fechanac ) , (
  2. DAY( CURDATE( ) ) < DAY( pac_fechanac ) ) , IF( DAY( CURDATE( ) ) < DAY( pac_fechanac ) , 1, 0 )
  3. ) AS pers_meses, (
  4. DAY( CURDATE( ) ) - DAY( pac_fechanac ) +30 * ( DAY( CURDATE( ) ) < DAY( pac_fechanac ) )
  5. ) AS pers_dias, (
  6. YEAR( FROM_DAYS( DATEDIFF( NOW( ) , pac_fechanac ) ) )
  7. ) AS anos
  8. FROM paciente
  9. WHERE pac_sexo =  'Masculino'
  10. ORDER BY pers_meses DESC
  11. LIMIT 0 , 30
[/CODE]
En este caso sólo los varones.. (asi es como se ve)


Ahora, quiero hacer esto pero asignarle un rango de búsqueda a los meses.. buscar por ejemplo niños entre 9 y 11 meses

Espero se entienda mi duda, saludos

Por cierto, lo intenté tipo:
Cita:
WHERE pac_sexo = 'Masculino' AND pers_meses = 9
pero no me sale:c

Última edición por gnzsoloyo; 30/11/2013 a las 10:54 Razón: título mal escrito
  #2 (permalink)  
Antiguo 18/11/2013, 08:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 9 meses
Puntos: 774
Respuesta: Rango de búsqueda a una consulta

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT pac_rut, pac_nombre, pac_sexo, MONTH( CURDATE( ) ) - MONTH( pac_fechanac ) +12 * IF( MONTH( CURDATE( ) ) < MONTH( pac_fechanac ) , 1, IF( MONTH( CURDATE( ) ) = MONTH( pac_fechanac ) , IF( DAY( CURDATE( ) ) < DAY( pac_fechanac ) , 1, 0 ) , 0 ) ) - IF( MONTH( CURDATE( ) ) <> MONTH( pac_fechanac ) , (
  3. DAY( CURDATE( ) ) < DAY( pac_fechanac ) ) , IF( DAY( CURDATE( ) ) < DAY( pac_fechanac ) , 1, 0 )
  4. ) AS pers_meses, (
  5. DAY( CURDATE( ) ) - DAY( pac_fechanac ) +30 * ( DAY( CURDATE( ) ) < DAY( pac_fechanac ) )
  6. ) AS pers_dias, (
  7. YEAR( FROM_DAYS( DATEDIFF( NOW( ) , pac_fechanac ) ) )
  8. ) AS anos
  9. FROM paciente
  10. ORDER BY pers_meses DESC
  11. LIMIT 0 , 30) AS t1 WHERE  pac_sexo = 'Masculino' AND pers_meses = 9
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por gnzsoloyo; 18/11/2013 a las 08:08
  #3 (permalink)  
Antiguo 20/11/2013, 21:33
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Rango de búsqueda a una consulta

Gracias me sirvió muchísimo, lo que me tenía pensando varias horas me lo solucionaste en unos minutos

Mira, quiero abusando de tu conocimiento o de algún otro forero, realicé lo sig.

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT pac_rut, pac_nombre, pac_sexo, MONTH( CURDATE( ) ) - MONTH( pac_fechanac ) +12 * IF( MONTH( CURDATE( ) ) < MONTH( pac_fechanac ) , 1, IF( MONTH( CURDATE( ) ) = MONTH( pac_fechanac ) , IF( DAY( CURDATE( ) ) < DAY( pac_fechanac ) , 1, 0 ) , 0 ) ) - IF( MONTH( CURDATE( ) ) <> MONTH( pac_fechanac ) , (
  3. DAY( CURDATE( ) ) < DAY( pac_fechanac ) ) , IF( DAY( CURDATE( ) ) < DAY( pac_fechanac ) , 1, 0 )
  4. ) AS pers_meses, (
  5. DAY( CURDATE( ) ) - DAY( pac_fechanac ) +30 * ( DAY( CURDATE( ) ) < DAY( pac_fechanac ) )
  6. ) AS pers_dias, (
  7. YEAR( FROM_DAYS( DATEDIFF( NOW( ) , pac_fechanac ) ) )
  8. ) AS anos
  9. FROM paciente
  10. ORDER BY pers_meses DESC) AS t1 WHERE  pac_sexo = 'Femenino' AND pers_meses >= '$parametro1f' AND pers_meses <= '$parametro2f'
Lo mismo que me enviaste pero yo tomo lo que el usuario quiere como rango.

Ahora, me surge la idea de además del rango edad y sexo, quiero saber otro dato que está en otra tabla.

Mi primera tabla están los datos que sacamos recién
- ID del paciente
- Nombre
- Fecha de Nacimiento
- Sexo

Tengo una segunda tabla en donde se llevan registros (controles) de los usuarios (pacientes es este caso)

Segunda Tabla (de donde quiero sacar más datos)
- ID de control
- ID de paciente (a quien pertenece este control)//es el ID del paciente
- Estado nutricional (puede ser "Normal", "Bajo Peso" o "Sobre Peso"

La pregunta es;
¿Como hago el join? en la consulta que me hiciste.. Anido otro select? lo hago y me arroja error:/

La pregunta de mi sentencia sería:
Saber que, niñOs de entre 3 a 6 (por ejemplo) meses tienen estado nutricional "Bajo Peso"
Lo que está en cursiva es nuevo en la consulta.

Voy a seguir leyendo y probando para ver si me sale

Última edición por gnzsoloyo; 21/11/2013 a las 03:07
  #4 (permalink)  
Antiguo 21/11/2013, 08:48
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 9 meses
Puntos: 774
Respuesta: Rango de búsqueda a una consulta

Lee un poco sobre subconsultas, para hacer lo que necesitas podrias hacerlo de este modo:

select * from(
tu query) as t1 left join tabla2 as t2 on (t1.campoid=t2.campoid)


saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 30/11/2013, 10:26
 
Fecha de Ingreso: agosto-2010
Mensajes: 9
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Rango de búsqueda a una consulta

[URL="http://dev.mysql.com/doc/refman/5.0/es/comparisons-using-subqueries.html"]Gracias[/URL] me sirvió de mucho, quedó algo así :)
Código SQL:
Ver original
  1. SELECT t10.*, t2.escalamassie, t2.fecha  FROM(
  2. SELECT * FROM(
  3. SELECT paciente.pac_rut, pac_nombre, pac_sexo, MONTH( CURDATE( ) ) - MONTH( pac_fechanac ) +12 * IF( MONTH( CURDATE( ) ) < MONTH( pac_fechanac ) , 1, IF( MONTH( CURDATE( ) ) = MONTH( pac_fechanac ) , IF( DAY( CURDATE( ) ) < DAY( pac_fechanac ) , 1, 0 ) , 0 ) ) - IF( MONTH( CURDATE( ) ) <> MONTH( pac_fechanac ) , (
  4. DAY( CURDATE( ) ) < DAY( pac_fechanac ) ) , IF( DAY( CURDATE( ) ) < DAY( pac_fechanac ) , 1, 0 )
  5. ) AS pers_meses, (
  6. DAY( CURDATE( ) ) - DAY( pac_fechanac ) +30 * ( DAY( CURDATE( ) ) < DAY( pac_fechanac ) )
  7. ) AS pers_dias, (
  8. YEAR( FROM_DAYS( DATEDIFF( NOW( ) , pac_fechanac ) ) )
  9. ) AS anos
  10. FROM paciente
  11. ORDER BY pers_meses DESC
  12. ) AS t1 WHERE  pac_sexo = '$parametro5' AND pers_meses >= '$parametro1f' AND pers_meses <= '$parametro2f'
  13. ) AS t10 LEFT JOIN control AS t2 ON (t10.pac_rut=t2.pac_rut)
  14. WHERE  t2.escalamassie = '$parametro3f'

Ya testeando la plataforma, hay un pequeño GRAN detalle, si bien mi consulta realiza lo siguiente:
Realiza una búsqueda (en este caso) por un parámetro llamado "Escala de Massie", del cuál puedo elegir buscar entre Hombre o Mujer ($parametro5), igual asirganarle un rango de edad (de $parametro1f hasta $parametro2f) pero aquí comienza el problema.

Cuando hago la búsqueda por MESES, por ejemplo de 2 a 8 meses, me arroja resultados de pacientes de 1 año 2 meses, esto dado a que tiene 2 meses...

¿Cómo hago?, me imagino sumarle +12 a meses cuando tenga 1 año? ummm..

PD; nose si va aquí o debo crear otro tema, si no va aquí mi duda pido disculpas del caso.

Última edición por gnzsoloyo; 30/11/2013 a las 10:54 Razón: Codigo de programacion no permitido en foros de BBDD
  #6 (permalink)  
Antiguo 01/12/2013, 21:30
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 9 meses
Puntos: 774
Respuesta: Rango de búsqueda a una consulta

entonces estas calculando mal los meses, revisa tu calculo de meses :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: mysql+consulta
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 03:49.