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

Sacar 2 veces el mismo valor

Estas en el tema de Sacar 2 veces el mismo valor en el foro de Bases de Datos General en Foros del Web. Hola gente, soy novato en esto del SQL y necesito ayuda para realizar esta consulta usuarios( id ,nick) topic( id ,id_usuario,titulo) replies_topic( id ,id_topic,id_usuario,titulo) El ...
  #1 (permalink)  
Antiguo 02/03/2018, 09:05
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 4 meses
Puntos: 4
Sacar 2 veces el mismo valor

Hola gente, soy novato en esto del SQL y necesito ayuda para realizar esta consulta

usuarios(id,nick)
topic(id,id_usuario,titulo)
replies_topic(id,id_topic,id_usuario,titulo)

El problema esta en que no consigo volver a sacar el nick del usuario que realiza una respuesta (replies_topic)

Mi consulta actualmente

Código SQL:
Ver original
  1. SELECT nick,titulo
  2. FROM topic
  3. INNER JOIN usuarios ON usuarios.id=topic.id_usuario
  4. INNER JOIN topic_replies ON topic_replies.id_usuario=usuarios.id


Gracias de antemano y un saludo :)
  #2 (permalink)  
Antiguo 02/03/2018, 09:29
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, 8 meses
Puntos: 774
Respuesta: Sacar 2 veces el mismo valor

Código SQL:
Ver original
  1. SELECT nick,titulo, t1.usuario
  2. FROM topic
  3. INNER JOIN usuarios ON usuarios.id=topic.id_usuario
  4. INNER JOIN topic_replies ON topic_replies.id_usuario=usuarios.id
  5. INNER JOIN usuarios AS t1 ON (t1.id=topic_replies .id_usuario)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 02/03/2018, 10:51
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Sacar 2 veces el mismo valor

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. SELECT nick,titulo, t1.usuario
  2. FROM topic
  3. INNER JOIN usuarios ON usuarios.id=topic.id_usuario
  4. INNER JOIN topic_replies ON topic_replies.id_usuario=usuarios.id
  5. INNER JOIN usuarios AS t1 ON (t1.id=topic_replies .id_usuario)
Gracias, funciona pero a la mitad, cuando id_usuario de topic_replies es distinto al del topic no arroja ningún resultado

No se el por que, iré probando a ver si consigo solucionarlo
  #4 (permalink)  
Antiguo 02/03/2018, 13:28
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, 8 meses
Puntos: 774
Respuesta: Sacar 2 veces el mismo valor

me imagino que no saco el resultado deseado, yo no tengo tus datos, solo te di una idea de como hacer el query, ya tu tienes que irle buscando
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 03/03/2018, 11:29
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Sacar 2 veces el mismo valor

Cita:
Iniciado por Libras Ver Mensaje
me imagino que no saco el resultado deseado, yo no tengo tus datos, solo te di una idea de como hacer el query, ya tu tienes que irle buscando
Alfin pude resolverlo, ahora tan solo me falta una cosa y ahora si que si necesito de tu ayuda nuevamente

Hasta ahora tengo esta consulta
Código SQL:
Ver original
  1. SELECT topic.titulo, t.nick AS CreadorTema, COUNT(topic_replies.id_topic) AS respuestas, usuarios.nick AS respuestaDe, topic_replies.body
  2. FROM topic_replies
  3. INNER JOIN usuarios ON usuarios.id = topic_replies.id_usuario
  4. INNER JOIN topic ON topic.id = topic_replies.id_topic
  5. INNER JOIN usuarios AS t ON t.id = topic.id_usuario
  6. GROUP BY topic.id
  7. ORDER BY topic_replies.id DESC

Funciona perfectamente, ahora el problema es cuando un topic es iniciado y no tiene ninguna respuesta (topic_replies), no muestra ese topic...

Dicho de otra manera, Si no ahí ninguna relación entre (topic.id, replis.id_topic) Que muestra el usuario creador del tema como ultima respuesta.

http://sqlfiddle.com/#!9/6843d/2
  #6 (permalink)  
Antiguo 04/03/2018, 16:58
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Sacar 2 veces el mismo valor

Después de romperme la cabeza frente al teclado ya he dado con el resultado que deseaba gracias @Libras por haberme dado una pista con tu consulta, Mi pregunta ahora es sabiendo que funciona, esta bien optimizada ?

Código SQL:
Ver original
  1. SELECT topic.titulo, usuarios.nick, IFNULL(t.nick, usuarios.nick)
  2. FROM topic
  3. INNER JOIN usuarios ON usuarios.id = topic.id_usuario
  4. LEFT JOIN topic_replies ON topic_replies.id_topic = topic.id OR topic_replies.id_topic IS NULL
  5. LEFT JOIN usuarios AS t ON t.id = topic_replies.id_usuario OR t.id IS NULL
  6. GROUP BY topic.id
  7. ORDER BY topic.id DESC
  #7 (permalink)  
Antiguo 04/03/2018, 22: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, 8 meses
Puntos: 774
Respuesta: Sacar 2 veces el mismo valor

que manejador de bases de datos estas usando??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: query
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 07:44.