Hola Sataca.
Te comento las cosas qeu veo.
Cita: 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:
SELECT distinct(a.id_tema) as id_tema FROM RESPUESTAS a,TEMAS b WHERE b.estado=1";
SELECT COUNT(id) AS valor,id_tema FROM RESPUESTAS WHERE id_tema='".$id_tem."'"
Tienes esas dos consultas, pues como bien dices, una sobra.
Te explico:
-segun veo tienes dos tablas : RESPUESTAS y TEMAS. Y lo que deseas hacer es ver qué temas (y cuántos) son los más votados.
Como bien dices, en la priemra consulta que haces, en el momento en que hay varios registros, la cosa ira mal. Por qué, porque no haces ninugna unión entre las tablas.
La tabla TEMAS tendrás una primary-key, que supongo será id_tema (por ejempl)
Y la tabla RESPUESTAS tendrá otra primary key que será: (usuario, id_tema, fecha) (por ejemplo). pero a su vez id_tema será una FOREIGN KEY(porque no podrá elegir temas que no estén en la tabla TEMAS)
Por lo tanto la selecrt qeu buscas será del siguiente modo:
Cita: select distinct(b.descripcion_tema)
from respuestas a, temas b
where b.id_tema=a.id_tema
' and b.estado= 1' No sé que pretendes con este campo, pero si los usas será por algo, así qeu tendras qeu añadirlo a la consulta.
De esta forma obtendras la descripcion de todos los temas que han sido votados.
Para saber el numero de temas que hay, tienes dos opciones, una vez tengas los resultados de la select anterior los cuentas, o bien haces otra select exactamente igual:
Cita: select count(distinct(b.descripcion_tema))
from respuestas a, temas b
where b.id_tema=a.id_tema
' and b.estado= 1' No sé que pretendes con este campo, pero si los usas será por algo, así qeu tendras qeu añadirlo a la consulta.
EDITO: He releido las cosas, y supongo que con la condicion comentada antes pretendes sacar las que tienen puntuacion = 1 (osease, las mejores) Eso implica que el campo estado ha de pertenecer a la tabla RESPUESTAS, y no a TEMAS (como habia indicado con el alias. El alias es la letrita con la qeu nombramos a las tablas, por si no lo sabes)
Si deseas ordenar, bastara con añadirle al final de la select la clausula ORDER BY
ej: ORDER BY b.descripcion_tema.
(como ves la segunda consulta qeu propones no sirve de nada) Ralentizas infinito.
Respecto a la vista que comectas. Para qué haces una vista de un campo de una única tabla.
Si quieres optimizar, create la vista en la que ya tienes los datos de lso temas mas valorados.
En este caso, la select qeu tienes que usar para la vista seria algo asi (depende de tus primarys keys, etc etc etc)
Select a.id_tema, a.desc_tema, b.valoracion
from temas a, valoraciones b
where b.id_tema=a.ide_tema
order by b.valoraciones
Más o menos te queda claro?????
Si no, me dices, y e lo explico con mas calma.
Sólo una cosa, has de trabajr un poco más con el tema del SQL, porqeu el problema lo tienes con la generacion y creacion de las SLELECT'S.
Así qeu ya sabes, dedícale una horita, y verás que obtendrás buenos resultados.