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

4 selects a una misma tabla indexados o inner joins??

Estas en el tema de 4 selects a una misma tabla indexados o inner joins?? en el foro de Mysql en Foros del Web. Hola a todos, estoy realizando una consulta a una base de datos y es tan complicada que ya no se que hacer. Por favor, a ...
  #1 (permalink)  
Antiguo 14/09/2010, 02:27
 
Fecha de Ingreso: febrero-2009
Mensajes: 17
Antigüedad: 15 años, 2 meses
Puntos: 0
4 selects a una misma tabla indexados o inner joins??

Hola a todos,

estoy realizando una consulta a una base de datos y es tan complicada que ya no se que hacer. Por favor, a ver si podeis ver la luz donde yo solo veo oscuridad.

Os cuento:

Resulta que la base de datos consiste en preguntas y respuestas de la forma:


|-- pregunta (id=1, usuario_creador='luis',usuario_asociado='pepe', estado='abierto')
|-- respuesta3 (id=15, usuario_asociado='pepe', usuario_respuesta='luis', estado='cerrado')
|-- respuesta2 (id=10, usuario_asociado='pepe', usuario_respuesta='loli', estado='abierto')
|-- respuesta1 (id=9, usuario_asociado='pepe', usuario_respuesta='juan')

|-- pregunta (id=2, usuario_creador='marta',usuario_asociado='felix', estado='bloqueado')
|-- respuesta2 (id=18, usuario_asociado='felix', usuario_respuesta='ruiz', estado='cerrado')
|-- respuesta1 (id=12, usuario_asociado='felix', usuario_respuesta='jose', estado='bloqueado')

|-- pregunta (id=2, usuario_creador='luis',usuario_asociado='julian', estado='cerrado')
|-- respuesta2 (id=18, usuario_asociado='julian', usuario_respuesta='pepe', estado='abierto')
|-- respuesta1 (id=12, usuario_asociado='julian', usuario_respuesta='jose', estado='bloqueado')

|-- pregunta (id=3, usuario_creador='ana',usuario_asociado='felix', estado='abierto')
|-- respuesta4 (id=11, usuario_asociado='felix', usuario_respuesta='mari', estado='bloqueado')
|-- respuesta3 (id=7, usuario_asociado='felix', usuario_respuesta='pepe' ,estado='abierto')
|-- respuesta2 (id=6, usuario_asociado='felix', usuario_respuesta='jose', estado='cerrado')
|-- respuesta1 (id=5, usuario_asociado='felix', usuario_respuesta='ana', estado='cerrado')
(...)

y asi hasta casi 4000 registros.

Bueno, pues estoy intentado sacar el siguiente enunciado:

"todos los ID de las preguntas cuyo usuario asociado sea felix, cuya ultima respuesta (la de id mas alto) corresponda con el usuario respuesta 'pepe' y cuyo estado no sea 'cerrado'".

Ya no se ni lo que estoy haciendo. Dado que todo está en la misma tabla me recomendaron que anidara varios SELECTs pero creo que me estoy complicando la vida enormemente y al final creo que me estoy liando demasiado.

¿Alguna idea?¿Debo sustituir los SELECTS por INNER JOINs?


muchas gracias por vuestro apoyo y ayuda,

un saludo,
dajomaj.
  #2 (permalink)  
Antiguo 14/09/2010, 03:11
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: 4 selects a una misma tabla indexados o inner joins??

Cita:
¿Alguna idea?¿Debo sustituir los SELECTS por INNER JOINs?
¿Por qué no mejor nos muestras cómo es la sentencia que estás usando, y si es posible la estructura (CREATE TABLE ...) de cada tabla implicada, para poder entender mejor las relaciones y poder aconsejarte bien?
Esto último es porque la estructura no queda muy clara con lo que estás posteando...
__________________
¿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 14/09/2010, 06:16
 
Fecha de Ingreso: febrero-2009
Mensajes: 17
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: 4 selects a una misma tabla indexados o inner joins??

Buenas gnzsoloyo,

tienes razón con que no se entiende bien.

La estructura ya estaba creada en la empresa y no puedo modificarla.

la idea básica es que esto es una tabla de preguntas. A cada pregunta va asociada varias respuestas y como campos tienes:
- quien creó la pregunta.
- quien está asociado a la pregunta.
- el pripio texto de la pregunta.
y en esta misma tabla y con la misma estructura las respuestas.
¿Como se diferencian unas de otras?

Porque simplemente cuando alguien accede a ver una pregunta lo que cuelga de ella, que son las respuestas, en la tabla son creadas como un registro más con la diferencia de que el campo
- 'id_pregunta'
no está a null. Es decir, es una respuesta.

a continuación dejo la enorme select que tengo:

SELECT *
FROM preguntas a

WHERE usuario_asociado = 'felix'
and usuario_creador <> usuario_asociado
and id_pregunta in
(
SELECT id FROM preguntas b
where usuario_asociado = 'felix'
and id_estado <> 7
and id_estado <> 5
and id_pregunta is null
)
and id in
(
SELECT max(id)
FROM preguntas c
WHERE usuario_asociado = 'felix'


and descripcion is not null

group by id_pregunta

)
order by falta desc // fecha de alta.


Esta select cumple con el enunciado:

"Obtener el id_respuesta de todas las preguntas que estan asociadas a felix, cuya última respuesta no sea suya y que su estado no sea cerrado y obtener también la descripcion de la última respuesta (la que tenga la fecha más reciente) ".

Espero haberme explicado,

un saludo,
dajomaj.

Etiquetas: joins, selects, 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 19:15.