Ver Mensaje Individual
  #6 (permalink)  
Antiguo 06/02/2012, 02:37
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: armar consulta para mostrar las opiniones mas...

SELECT op.id_opinion,
op.autor_op,
op.fecha_op,
op.hora_op,
op.email_op,
op.id_categoria_op,
op.titulo_op,
op.descripcion_op,

/// Efectivamente es la lista de campos

ifnull(numRep.numComentarios,0) comentarios

/// Numero de replicas (si, numRep.numComentarios es un alias)
/// La funcion Ifnull pasa los nulos a cero
/// al resultado se le da el alias "comentarios"


FROM
opiniones op LEFT JOIN

/// Por el left join consigo que me muestre todas las opiniones tengan o no replicas

(SELECT id_opinion,
count(*) numComentarios
FROM replicas
GROUP BY id_opinion) numRep

///Subconsulta, con alias numRep, que me da el numero de replicas por cada opinion, fijate que retorna dos campos el id_opinion para poder relacionar con la otra tabla y el count(*) con alias numComentarios


ON op.id_opinion=numRep.id_opinion

//Clausula ON que relaciona la tabla opiniones (alias op) con la subconsulta con alias numRep por el campo id_opinion

ORDER BY ifnull(numRep.numComentarios,0) DESC;

//// Ordeno en orden inverso (DESC, mayor a menor) por el numero de replicas.

Otras dudas...

No se como consigues ese num_visto

1_______ 127.0.0.1_______ 2_______ 2012-02-03 13:30:23_______ 2

esto significa que la opinion 2 se ha visitado 2 veces en el segundo 23 del minuto 30.... muy fino el contador...

No seria mas logico guardar un registro por visita?...

Tu adaptación de la consulta

SELECT
op.id_opinion,
op.autor_op,
op.lugar_op,
op.fecha_op,
op.hora_op,
op.email_op,
op.id_categoria_op,
op.titulo_op,
op.descripcion_op,

Te falta el numero de visitas... no?

sbcVisitas.visitas


FROM opiniones op LEFT JOIN


(SELECT SUM(ct.num_visto)
FROM contador ct)

Esta subconsulta retorna la suma de todos los vum_visto, y ademas no esta el campo id_opinion por lo que no se puede relacionar con la tabla opiniones

Toda subconsulta debe tener su alias

sunbstituyela por

(SELECT ct.id_opinion,SUM(ct.num_visto) visitas
FROM contador ct
GROUP BY ct.id_opinion) sbcVisitas

ON op.id_opinion=ct.id_opinion

La relacion es entre la tabla y la subconsulta luego debes cambiar los alias

ON op.id_opinion=sbcVisitas.id_opinion

ORDER BY ct.num_visto DESC LIMIT 0,4";

idem

ORDER BY sbcVisitas.visitas DESC LIMIT 0,4;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 06/02/2012 a las 02:46