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

[SOLUCIONADO] Duda con subconsultas

Estas en el tema de Duda con subconsultas en el foro de Mysql en Foros del Web. Muy buenas. Tengo la siguiente tabla @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE TABLE IF NOT EXISTS `tbl_comentarios` (   `idcomentario` INT ( 11 ) ...
  #1 (permalink)  
Antiguo 22/12/2013, 05:45
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 12 años, 4 meses
Puntos: 1
Duda con subconsultas

Muy buenas. Tengo la siguiente tabla

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tbl_comentarios` (
  2.   `idcomentario` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `autor` INT(11) NOT NULL,
  4.   `fecha` datetime NOT NULL,
  5.   `contenido` VARCHAR(500) COLLATE utf8_spanish_ci NOT NULL,
  6.   `comentario_padre` INT(11) DEFAULT NULL,
  7.   PRIMARY KEY (`idcomentario`),
  8.   KEY `tbl_comentarios_fk_1` (`comentario_padre`),
  9.   KEY `tbl_comentarios_fk_2` (`autor`)
  10. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=9 ;

El atributo "comentario_padre" lo utilizo para almacenar respuestas a comentarios. Si es NULL es porque es un comentario "padre". Si no es NULL, llevará el "idcomentario" del comentario del que es respuesta.

Bien, pues quiero recuperar todos los comentarios "padre" de un usuario (atributo "autor") y que en esa misma consulta apareciera algún indicador de si ese comentario tiene o no respuestas. Esto lo podría hacer fácilmente en dos consultas, pero me parece mucho más óptimo hacerlo en una sola usando subconsultas. El problema es que no logro dar con algo que funcione :(

Me gustaría que el resultado de la consulta fuera más o menos así:

| idcomentario | fecha | contenido | respuestas |
| 2 | 25-07-2013| "lo_que_sea" | "SI" |
| 5 | 16-08-2013| "lo_que_sea" | "NO" |

Donde respuestas = "SI" indicaría que hay comentarios que tiene como "comentario_padre el idcomentario.

¿Cómo lo haríais?

Muchas gracias por anticipado.
  #2 (permalink)  
Antiguo 23/12/2013, 02:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Duda con subconsultas

Si sabes hacer las dos consultas

Código MySQL:
Ver original
  1. SELECT p.idComentario,p.fecha,p.contenido FROM tbl_comentarios p WHERE p.autor=X and p.comentario_padre IS NULL;
  2.  
  3.  
  4. SELECT r.comentario_padre,count(r.idcomentario) resp FROM tbl_comentarios r WHERE r.comentario_padre IS NOT NULL
  5. GROUP BY r.comentario_padre;

solo tienes que combinarlas

Código MySQL:
Ver original
  1. SELECT p.idComentario,p.fecha,p.contenido,IFNULL(sbc.resp,0) respuestas FROM tbl_comentarios p
  2.  
  3.  
  4. SELECT r.comentario_padre,count(r.idcomentario) resp FROM tbl_comentarios r WHERE r.comentario_padre IS NOT NULL
  5. GROUP BY r.comentario_padre
  6.  
  7.                 ) sbc   ON p.idComentario=sbc.comentario_padre
  8.  
  9. WHERE p.autor=X and p.comentario_padre IS NULL;

Puedes hacer if(IFNULL(sbc.respuestas,0)>0,"Si","No") si no te gusta mostrar el número de respuestas....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 23/12/2013 a las 02:30
  #3 (permalink)  
Antiguo 23/12/2013, 04:52
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Duda con subconsultas

Genial! Eso era exactamente lo que buscada, pero no era capaz de englobar las dos consultas en una sola sin que algo fallara.
Mil gracias!!

Etiquetas: select, subconsultas
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 11:40.