Hola
Pues hay varias maneras de efectuar eso, pero creería que la más sencilla es que agregues un campo a la tabla llamado "orden", y que agregues a tu consulta ese campo, es decir algo asi:
Código PHP:
SELECT m.subject, m.ID_TOPIC, t.ID_TOPIC, t.puntos
FROM (smf_topics AS t, smf_messages AS m)
WHERE t.ID_TOPIC = m.ID_TOPIC
AND t.orden = 1 ORDER BY t.puntos DESC
LIMIT 10
Donde 1 es el valor que tomarian los 10 primeros registros, y obviamente para esto necesitas ya sea un procedimiento almacenado o un script de php aparte que se encargue de hacer esta tarea
El procedimiento almacenado conlleva saber del tema, y no se si lo manejes, por ende creería que tal vez lo más indicado para vos sería hacer un archivo php, en donde hagas lo siguiente:
1. El campo orden de los registros lo pongas en 0 u otro valor diferente de uno (con un update a los que tengas en 1, pues los demás ya deben tener el valor 0 o el que pongas por defecto en ese campo)
2. Luego del paso 1, traigas la consulta anterior que tenías, es decir esta
Código PHP:
SELECT m.subject, m.ID_TOPIC, t.ID_TOPIC, t.puntos
FROM (smf_topics AS t, smf_messages AS m)
WHERE t.ID_TOPIC = m.ID_TOPIC
ORDER BY t.puntos DESC
LIMIT 10
3. Recorriendo los registros resultantes de esta consulta, hacer un update a cada uno de ellos en su campo orden y le pones el valor 1
Y este archivo php nuevo tendrías que ejecutarlo semanalmente, o bueno, crear una tarea programada en windows o un cron job en linux (no se cual manejes) que se encargue de hacer eso semanalmente
Y ya con eso, semanalmente cambiarian los resultados que necesitas
Espero te sirva
Saludos