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

Duda SQL (IMPORTANTE!)

Estas en el tema de Duda SQL (IMPORTANTE!) en el foro de Bases de Datos General en Foros del Web. Hola, tengo una pequeña duda, que mas que nada se debe a mi inexperiencia usando consultas un tanto "complejas".. Bueno aqui va... Yo tengo dos ...
  #1 (permalink)  
Antiguo 16/06/2004, 08:53
Avatar de nitrouz  
Fecha de Ingreso: agosto-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 78
Antigüedad: 20 años, 8 meses
Puntos: 0
Exclamación Duda SQL (IMPORTANTE!)

Hola, tengo una pequeña duda, que mas que nada se debe a mi inexperiencia usando consultas un tanto "complejas"..

Bueno aqui va...

Yo tengo dos tablas tutoriales y valoracion
la tabla votos tiene id_voto, id_tuto, valoracion y tutoriales que tiene los campos tipicos: id_tuto, titulo, etc...

Yo quiero hacer que en la misma consulta, me diga por cada tutorial, la suma de los votos de cada uno de ellos...

Lo pude hacer mediante esta consulta...

Código:
SELECT *,SUM(valoracion.valoracion) as Rate
FROM tutorials, valoracion
WHERE tutorials.id_tutorial = valoracion.id_tutorial
GROUP BY tutorials.id_tutorial
El problema con esto es que solo me devuelve los tutoriales que alguna vez tuvieron un voto, pero yo quiero que me muestre en ambos casos..
O sea...
Que me diga 0 votos (o nada) cuando nunca hubo un voto y si tuvo, que me diga la suma de los mismos por cada tutorial.

A ver quien me puede ayudar

Desde ya muchas GRacias!!!!

Saludos!
__________________
Cristian Conedera
Mi Web: BothMedia.com, Diseño y Desarrollo
Mi Blog: nitrousBLOG*

Última edición por nitrouz; 16/06/2004 a las 09:00
  #2 (permalink)  
Antiguo 16/06/2004, 09:27
 
Fecha de Ingreso: febrero-2003
Mensajes: 1
Antigüedad: 21 años, 2 meses
Puntos: 0
lo que tu estás buscando es hacer un outer join. No se que base de datos estas usando, creo que usas mySql por lo que veo. No se como se hace en mySql, en ORACLE por ejemplo, se ponen detras de los campos en los que se quiere hacer outer join un simbolo + entre parentesis. En tu caso en ORACLE seria asi:

SELECT *,SUM(valoracion.valoracion)
FROM tutorials, valoracion
WHERE tutorials.id_tutorial = valoracion.id_tutorial (+)
GROUP BY tutorials.id_tutorial

Esto te devolveria los tutoriales que tuvieron valoraciones y los que no los tuvieron (los que no tuvieron, tendrán un valor nulo en el computed field ).

En la base de datos Sybase es distinto, se hace de la siguiente forma

SELECT *,SUM(valoracion.valoracion)
FROM {oj tutorials LEFT OUTER JOIN valoracion ON tutorials.id_tutorial = valoracion.id_tutorial}
GROUP BY tutorials.id_tutorial


No sé como será en mySql, espero haberte podido dar una pista para investigar y no haberte liado mucho.

Un saludo

JL
  #3 (permalink)  
Antiguo 16/06/2004, 09:39
Avatar de nitrouz  
Fecha de Ingreso: agosto-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 78
Antigüedad: 20 años, 8 meses
Puntos: 0
EXCELENTE! MUCHAS GRACIAS

Efectivamente es como tu decías

Aquí les dejo el código por si a alguien le interesa, saludos!

Código:
SELECT *,SUM(valoracion.valoracion)as Rate
FROM tutorials LEFT OUTER JOIN valoracion ON tutorials.id_tutorial = valoracion.id_tutorial
GROUP BY tutorials.id_tutorial
Saludos amigos!
__________________
Cristian Conedera
Mi Web: BothMedia.com, Diseño y Desarrollo
Mi Blog: nitrousBLOG*
  #4 (permalink)  
Antiguo 16/06/2004, 09:45
Avatar de nitrouz  
Fecha de Ingreso: agosto-2003
Ubicación: Buenos Aires, Argentina
Mensajes: 78
Antigüedad: 20 años, 8 meses
Puntos: 0
una cosa mas... se puede hacer que
tutorials.id_tutorial y valoracion.id_tutorial... pasen a ser un solo campo, o sea id_tutorial

Porque luego en la consulta me aparecen los dos y es medio innecesario.

Gracias denuevo
__________________
Cristian Conedera
Mi Web: BothMedia.com, Diseño y Desarrollo
Mi Blog: nitrousBLOG*
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 14:56.