Hola,
estoy programando una web (PHP+MySQL), tipo foro. Donde los usuarios proponen un tema, y estos se pueden comentar y valorar.
A partir de los comentarios, lecturas, valoraciones y fecha del tema se sacan unos tops.
El de fecha y lecturas, no hay problema, ya que son campos en la misma tabla TEMAS.
Pero para sacar los más valorados, y los más comentados, he de consultar en dos tablas y aplicarle LIMIT y ORDER. Lo que tengo hecho ahora funciona, pero en la bd hay pocos registros. Me temo que tal como lo tengo ahora, en cuanto se vayan añadiendo registros, sea terriblemente lento el sistema, al no tener LIMIT en ningún laod
El caso de los comentarios. Tengo una tabla llamada RESPUESTAS, que guarda el id_tema (relacionado con el campo id de TEMAS), el comentario, el id_usuario, el estado (si es público o no) y la fecha.
Lo que hago para obtener los temas más comentados es lo siguiente:
Código PHP:
SELECT distinct(a.id_tema) as id_tema FROM RESPUESTAS a,TEMAS b WHERE b.estado=1";
Esta consulta la guardo en un array y luego hago esto:
Código PHP:
SELECT COUNT(id) AS valor,id_tema FROM RESPUESTAS WHERE id_tema='".$id_tem."'"
, donde $id_tem es cada uno de los temas encontrados en a primera consulta.
Seguro que una de los consultas sobra, y lo más grave es que no veo la forma de añadir un LIMIT, y tampoco me deja aplicar "ORDER BY valor ASC"
¿Se os ocurre como optimizar esta consulta y aplicarle un LIMIT y un TOP??
Y el otro caso, el de los tops de temas más valorados. Tengo el mismo problema, no veo como aplicar un LIMIT ni me deja ordenar a través del campo que obtengo en el SUM.
Para esto tengo la tebla TEMAS, la vista TEMAS_VALORADOS, y la tabla VALORACIONES donde guardo el id_tema, el id_usuario y el voto (1 ó -1).
La vista TEMAS_VALORADOS es la siguiente:
Código PHP:
SELECT DISTINCT VALORACIONES.id_tema AS id_tema FROM VALORACIONES
Este caso lo que hago es lo siguiente, le paso un id_categoria para filtrar:
Código PHP:
SELECT a.id_tema,b.id_categoria FROM TEMAS_VALORADOS a,TEMAS b WHERE b.id_categoria='".$id_categoria."' AND a.id_tema=b.id";
De aqui obtengo un listado de temas, que lo meto en un array y hago lo mismo que en los más comentados:
Código PHP:
SELECT SUM(a.valoracion) AS valor, a.id_tema FROM VALORACIONES a,TEMAS b WHERE a.id_tema='".$id_tem."'"
Y me ocurre lo mismo, si la aplico un ORDER BY valor ASC (ó DESC) no me hace ni puto caso.
Bueno, seguro que me estoy haciendo un lio y es mucho más fácil de lo que creo, pero no veo la forma.
En resumen, necesito aplicar un LIMIT y un ORDER en estas consultas.
Muchas gracias y saludos