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

Búsqueda sobre una columna que cumpla multiples datos

Estas en el tema de Búsqueda sobre una columna que cumpla multiples datos en el foro de Mysql en Foros del Web. Hola, Es algo que creo que no debe ser dificil, pero ahora no llego a ver como hacerlo sin complicarlo mucho. Son unas tablas de ...
  #1 (permalink)  
Antiguo 17/05/2011, 12:31
 
Fecha de Ingreso: abril-2009
Mensajes: 48
Antigüedad: 10 años, 8 meses
Puntos: 5
Búsqueda sobre una columna que cumpla multiples datos

Hola,

Es algo que creo que no debe ser dificil, pero ahora no llego a ver como hacerlo sin complicarlo mucho.

Son unas tablas de unas visitas de unos pacientes a unos médicos que puntuan unos objetivos para esas visitas.

Por lo tanto tengo más o menos estas tablas con estos campos:

paciente --> ID_paciente
visita --> ID_visita , ID_paciente
objetivo --> ID_objetivo
objetivo_puntuado --> ID_objetivo, ID_visita , valor

Necesito saber por ejemplo, un paciente que tenga para alguna visita, los objetivos 3 y 4 puntuados con un valor de 2 y 3.

Se me ocurren opciones en las que relaciono objetivo_puntuado con ella misma por ID_visita. Pero necesito que se pueda ampliar el número de objetivos que se busquen para cada visita.

Se os ocurre alguna forma????

Muchas gracias,

Mario
  #2 (permalink)  
Antiguo 17/05/2011, 13:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: Búsqueda sobre una columna que cumpla multiples datos

Si tienes una relación N:N entre paciente y objetivo, Objetivo es una tabla, Paciente otra, y las Puntuaciones van en una tercera.
En el extremo del caso, puede ser una relación 1:N, donde las puntuaciones van en otra tabla dependiente.
Regla general de las bases de datos relacionales: No existen campos multivaluados.
Un campo que puede contener más de un valor implica una tabla separada, dependiente de la otra, donde se ponen los valores relacionados con un mismo registro de la primera.

¿Se entiende la idea?

Cita:
Es algo que creo que no debe ser dificil, pero ahora no llego a ver como hacerlo sin complicarlo mucho.
El tema no pasa por complicarlo mucho o poco. Pasa por hacerlo bien o no. SI lo simplificas, pero no respetas el modelo relacional, lo único que vas a tener son problemas en el futuro, con los datos o con las consultas, pero tenerlos los tendrás.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 18/05/2011, 03:15
 
Fecha de Ingreso: abril-2009
Mensajes: 48
Antigüedad: 10 años, 8 meses
Puntos: 5
Respuesta: Búsqueda sobre una columna que cumpla multiples datos

Muchas gracias por la respuesta,

A lo mejor tienes razón, pero creo que me has entendido mal en algún punto o me he explicado mal.

Creo que más o menos lo tengo montado como dices, pero en vez de con paciente, con visita.

Tengo, las visitas en una tabla (visita), los objetivos en otra (objetivo) y las puntuaciones en una tercera (objetivo_puntuado). Puesto que es una relación N:N.

En una visita, un objetivo no puede tener varios valores diferentes. Pongo un ejemplo de lo que necesito, a ver si se entiende mejor:

Tabla: objetivo_puntuado

Id_visita - ID_objetivo - valor

3 ------ 4 ------ -2
3 ------- 16 ------- 5
3 ------ 6 ------ 3
4 ------- 4 ------- 3
5 ------- 2 ------- -1
5 ------- 6 ------- 3


Necesito hacer una búsqueda que me devuelva la visita 3 cuando busque una visita con el objetivo 4 puntuado con -2 y el objetivo 6 puntuado con 3.

Esto se puede hacer así supongo:

Código SQL:
Ver original
  1. SELECT o1.ID_visita FROM objetivo_puntuado AS o1 LEFT JOIN objetivo_puntuado AS o2 ON o1.ID_visita=o2.ID_visita WHERE o1.objetivo=4 AND o1.valor=-2 AND o2.ID_objetivo=6 AND o2.valor=3

Pero si en vez de 2 objetivos y valores, busco 6, esto empieza a dispararse, no?

Espero que se me haya entendido mejor. O a lo mejor realmente tengo un fallo conceptual, y necesito cambiar la estrucvtura, pero no veo donde.

Muchísimas gracias gnzsoloyo.
  #4 (permalink)  
Antiguo 18/05/2011, 10:54
 
Fecha de Ingreso: abril-2009
Mensajes: 48
Antigüedad: 10 años, 8 meses
Puntos: 5
Respuesta: Búsqueda sobre una columna que cumpla multiples datos

¿Nadie sabe una forma mejor de hacer esta query que la que he hecho yo?
  #5 (permalink)  
Antiguo 18/05/2011, 11:32
 
Fecha de Ingreso: abril-2009
Mensajes: 48
Antigüedad: 10 años, 8 meses
Puntos: 5
Respuesta: Búsqueda sobre una columna que cumpla multiples datos

Bueno,

mientras alguien me comente algo mejor, voy poniendo aquí la opción por la que me he decantado ahora, a ver que os parece:

Código MySQL:
Ver original
  1. SELECT ID_paciente FROM visita
  2. WHERE ID_visita IN ( SELECT ID_visita FROM objetivo_puntuado WHERE ID_objetivo='17' AND valor='2')
  3. AND ID_visita IN (SELECT ID_visita FROM objetivo_puntuado WHERE ID_objetivo='18' AND valor='3')


No sé si es la buena, pero creo que es mejor que los posibles 5 left join que planteaba antes, creo.

Un saludo

Etiquetas: columna, multiples
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 17:17.