Código:
SELECT
forotemas.titulo as titulo,
forotemas.id_tema as id_tema,
forotemas.visitas as visitas,
forotemas.autor_visitante as autor_visitante,
usuarios_registrados.nombre_usuario as nombre_usuario
FROM (forotemas
LEFT join usuarios_registrados
on forotemas.id_autor = usuarios_registrados.id_usuario)
LEFT join (SELECT id_tema, MAX(fecha) as ultimafecha
FROM fororespuestas
GROUP BY id_tema) as respuestas
ON forotemas.id_tema=respuestas.id_tema
where forotemas.id_categoria = '$id_categoria'
GROUP BY forotemas.id_tema
order by respuestas.ultimafecha Desc
LEFT JOIN para asegurar que salen todos los forotemas tengan o no respuestas y usuarios.
No se si pondra primero los que tengan fecha nula (es decir que no tienen respuestas)... si fuera asi habria que canviar de estrategia, primero listar los que tengan fecha not null y luego el resto por el orden que se quiera...
De donde sacas el numero de visitas? Por que si tines que actualizarlo en cada nueva visita luego igual tampoco es tan chapuzero guardar la fecha de la ultima respuesta... y lo simplificaria todo.
Quim