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

duda con una consulta

Estas en el tema de duda con una consulta en el foro de Mysql en Foros del Web. Ya voy a tratar de explicar mi problema. Primero estoy trabajando con una tabla donde guardo una lista de gente que se toma un examen. ...
  #1 (permalink)  
Antiguo 21/02/2010, 00:21
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 9 años, 9 meses
Puntos: 0
Pregunta duda con una consulta

Ya voy a tratar de explicar mi problema. Primero estoy trabajando con una tabla donde guardo una lista de gente que se toma un examen. Otra tabla con los resultados respectivos de dichos exámenes, una tabla con los códigos de resultados y una tabla intermedia donde almaceno los distintos resultados de un examen.

Aquí doy la estructura de las tablas

Tabla: examenes
Campo Tipo
IdExamen int(10)
NLista int(50)
FToma date
rut varchar(10)
Nombre varchar(150)

Tabla: resultados
Campo Tipo
IdResultado int(10)
rut varchar(10)
NLista int(10)

Tabla: resultados_has_codigosresultados
Campo Tipo
resultados_fichas_rut varchar(10)
resultados_IdResultado int(10)
codigosResultados_codigo varchar(3)

Tabla: codigosresultados
Campo Tipo
codigo varchar(3)
descripcion text
tiempo int(11)

Tabla: fichas
Campo Tipo
rut varchar(10)
nombre varchar(100)
fecha date
dir1 varchar(150)
dir2 varchar(150)
fono1 varchar(10)
fono2 varchar(10)
comuna varchar(20)
establecimiento varchar(50)
NFicha int(10)
condicion text
FUP date

Bueno les explico necesito hacer consultas que me devuelvan la cantidad de exámenes que me dieron como resultado alguno de los códigos en este mes y en un rango de edad como por ejemplo:

codigosResultados_codigo` = ' f1' OR 'f9' OR 'g7' OR 'g8' OR 'i' OR 'j1' OR 'j2' OR 'j3' OR 'j5' OR 'j6' OR 'k' OR 'n' OR 's' OR 'o5' OR 't1'

Y con edades de entre 25 a 29 años. Sorry pero me he quebrado la cabeza tratando de hacer la consulta.

Gracias de antemano
Espero su ayuda
  #2 (permalink)  
Antiguo 21/02/2010, 15:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: duda con una consulta

mmm nose como borrara el duplicado
  #3 (permalink)  
Antiguo 22/02/2010, 13:40
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 9 años, 10 meses
Puntos: 5
Respuesta: duda con una consulta

Mejor utiliza el operador IN
SELECT <lista de campos> FROM ...
WHERE
codigosResultados_codigo IN ('f1', 'f9,...)
AND
edad BETWEEN (25,29)
__________________
Mi blog de temas más o menos técnicos

Y aquí el Jamón jamon de Jabugo
  #4 (permalink)  
Antiguo 22/02/2010, 15:26
 
Fecha de Ingreso: febrero-2010
Mensajes: 5
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: duda con una consulta

yo estaba provando con algo como esto pero me devuelve 12 cuando deveria devolver 1
Código MySQL:
Ver original
  1. SELECT COUNT( examenes.rut ) AS 'Nº'
  2. FROM `examenes` , `resultados_has_codigosresultados` , `fichas`
  3. WHERE YEAR( CURDATE( ) ) - YEAR( `fecha` ) > '25' and YEAR( CURDATE( ) ) - YEAR( `fecha` ) < '29'
  4. AND `FToma` - day( `FToma` ) = curdate( ) - day( curdate( ) )
  5. AND `resultados_has_codigosresultados`.`codigosResultados_codigo`
  6. IN (
  7. 'f1', 'f9', 'g7', 'g8', 'i', 'j1', 'j2', 'j3', 'j5', 'j6', 'k', 'n', 's', 'o5', 't1'
  8. )
  #5 (permalink)  
Antiguo 23/02/2010, 14:10
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 9 años, 10 meses
Puntos: 5
Respuesta: duda con una consulta

A la consulta anterior le falta especificar como se hace el JOIN de las tablas
'examenes` , `resultados_has_codigosresultados` y `fichas'.

Tal como está hace un producto cartesiano con todas las filas de las tres tablas y seguramente por eso te salen demasiados registros.

Debes definir las claves primarias de cada una y luego establecer las relaciones entre ellas.
__________________
Mi blog de temas más o menos técnicos

Y aquí el Jamón jamon de Jabugo

Etiquetas: consultas, multi, tablas
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 13:08.