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";
Código PHP:
SELECT COUNT(id) AS valor,id_tema FROM RESPUESTAS WHERE id_tema='".$id_tem."'"
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
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";
Código PHP:
SELECT SUM(a.valoracion) AS valor, a.id_tema FROM VALORACIONES a,TEMAS b WHERE a.id_tema='".$id_tem."'"
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