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

Unir tabla

Estas en el tema de Unir tabla en el foro de Mysql en Foros del Web. ¡Buenas a todos! Llevo todo el día intentando hacer una pequeña consulta a la base de datos que simplemente sería seleccionar todos los datos de ...
  #1 (permalink)  
Antiguo 25/08/2013, 16:29
 
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Unir tabla

¡Buenas a todos! Llevo todo el día intentando hacer una pequeña consulta a la base de datos que simplemente sería seleccionar todos los datos de una tabla y hacer la media de un campo que está en otra tabla.

Los campos de la primera tabla(OFERTAS) sería:

id_oferta
nombre

y la segunda tabla (COMENTARIOS) sería:

id_comentario
id_oferta
valoracion

He estado probando y la media sería algo así:
Código MySQL:
Ver original
  1. SELECT CAST(AVG(valoracion) as DECIMAL(14,0)) as total
  2. FROM comentarios
  3. WHERE id_usuario=" .$_SESSION["id_usuario"]
;

y mi pregunta sería... ¿Cómo puedo unir las dos tablas y hacer la media en una única consulta?

Última edición por gnzsoloyo; 25/08/2013 a las 17:54
  #2 (permalink)  
Antiguo 25/08/2013, 16:46
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
r

Que es hacer la media?
  #3 (permalink)  
Antiguo 25/08/2013, 16:51
 
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Unir tabla

La media es la suma de la columna valoración y dividirlos por los registros totales que haya
  #4 (permalink)  
Antiguo 25/08/2013, 16:53
Avatar de KATHYU  
Fecha de Ingreso: julio-2013
Mensajes: 547
Antigüedad: 10 años, 9 meses
Puntos: 46
Respuesta: Unir tabla

Media es la suma de todos los valores entre el numero de valores.

Y para unir pues usa un inner join !!!!

Código MySQL:
Ver original
  1. SELECT COMENTARIOS.valoracion,COMENTARIOS.id_comentario, ofertas.nombre FROM comentarios inner join ofertas on comentarios.id_oferta = ofertas.id_oferta WHERE id_usuario=" .$_SESSION["id_usuario"])

Adecuala a tu gusto
__________________
Al contrario de lo que muchos podrían afirmar, ayudar no te hace pobre, sino más rico.
  #5 (permalink)  
Antiguo 25/08/2013, 17:05
 
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Unir tabla

Kathyu gracias por tu respuesta, eso mismo e estado probando pero al no tener ningún comentario creado me aparece como que no hay ninguna oferta creada :(
  #6 (permalink)  
Antiguo 25/08/2013, 17:58
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: Unir tabla

Código MySQL:
Ver original
  1.     ROUND(AVG(C.valoracion), 2) total,
  2.     C.id_comentario,
  3.     O.nombre
  4. FROM ofertas O LEFT JOIN comentarios C on O.id_oferta = C.id_oferta
  5. WHERE C.id_usuario= $_SESSION["id_usuario"]
  6.       OR C.id_oferta IS NULL
El CAST sólo sería necesario si el tipo de dato de "valoracion" fuese VARCHAR o CHAR, y eso sería una enorme metida de pata, por lo que estoy suponiendo que no es así, y se trata de un INT, o FLOAT..

Nota: Presta especial atención a que además de reemplazar INNER por LEFT, estoy cambiando de orden la posición de las tablas en el FROM, lo que es crítico cuando se usa LEFT JOIN o RIGHT JOIN.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 26/08/2013, 17:46
 
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Unir tabla

gnzsoloyo gracias por la breve explicación. Exactamente el campo 'valoración' se trata de un INT. He estado probando tu código y al parecer funciona pero.. cuando no hay comentarios registrados en la base de datos no aparece ninguna oferta y nosé porque puede ser :(

Código:
SELECT 
    ROUND(AVG(C.valoracion), 0) total,
    C.id_oferta, C.valoracion, O.* FROM ofertas O LEFT JOIN comentarios C on O.id_oferta = C.id_oferta 
    WHERE O.id_cat='$valor' OR C.valoracion IS NULL
La parte de C.id_usuario= $_SESSION["id_usuario"] ahora mismo no es necesario en el código.

Mi intención es hacer la media de la columna "valoración" y unirla con la tabla ofertas
  #8 (permalink)  
Antiguo 28/08/2013, 08:03
Avatar de enlinea777  
Fecha de Ingreso: mayo-2008
Ubicación: frente al pc
Mensajes: 1.830
Antigüedad: 15 años, 11 meses
Puntos: 127
r

De donde son, pregunto porque en mis 25 años de estudio es la primera ves que veo esa tecnología para un promedio.

Etiquetas: php, tabla, union
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:04.