Creo que el enfoque que sugerí en ese tema necesita mejorarse. Un problema es que solo los usuarios con nivel TL3 o superior pueden etiquetar publicaciones en Meta. Esto significa que la mayoría de los usuarios del sitio no podrían seguir mis instrucciones. El otro problema es que terminaremos con temas tanto sin respuesta como respondidos que tengan la etiqueta data-explorer. Eso no ayudará mucho a buscar consultas.
Disculpa la respuesta tardía. Me vi envuelto en la pregunta sobre cómo organizar las consultas del Explorador de Datos en el sitio. Usar la etiqueta data-explorer parece la solución ideal, pero los temas que contienen una consulta del Explorador de Datos deberán ser etiquetados por un usuario con estado TL3.
Creo que una consulta similar a la siguiente te proporcionará la información que buscas:
SELECT
topic_id,
category_id,
SUM(total_msecs_viewed) / 60000 AS estimated_minutes_read
FROM topic_users tu
JOIN topics t ON t.id = tu.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY tu.topic_id, category_id
ORDER BY estimated_minutes_read DESC
LIMIT 100
La instrucción LIMIT 100 en la última línea de la consulta podría ajustarse o eliminarse si deseas que se devuelvan más resultados.
Si elijo cuatro o cinco al azar y comparo el resultado de la columna de tiempo de lectura estimado en esta consulta con el tiempo de lectura estimado en el tema mismo, obtengo dos números muy diferentes:
Puedes utilizar el tiempo promedio que los usuarios tardan en leer el tema.
En ese caso, simplemente cambia la función SUM por AVG; quedaría así:
SELECT
topic_id,
category_id,
AVG(total_msecs_viewed) / 60000 AS estimated_minutes_read
FROM topic_users tu
JOIN topics t ON t.id = tu.topic_id
WHERE t.deleted_at IS NULL
AND t.archetype = 'regular'
GROUP BY tu.topic_id, category_id
ORDER BY estimated_minutes_read DESC
LIMIT 100
Pero eso significaría que, en promedio, una persona tarda 438 minutos en leer ese tema principal. Eso parece poco probable. Esto puede sonar tonto, pero ¿hubo suficientes ceros en 60,000?
Edición: ¿O quizás el promedio incluye todas las relecturas de un tema también? Así que una sola lectura sería de 61 minutos, pero en realidad los usuarios pasan un promedio de 438 minutos allí.
Aunque ahora tengo mucha curiosidad por saber cómo se calcula el Tiempo estimado de lectura para el Resumen, ya que idealmente te gustaría que coincidieran. Incluso reducirlos por un factor de diez solo daría una estimación aproximada.
Me cuesta descifrar estas cosas, pero parece que utiliza un cálculo basado en el número de palabras multiplicado por el tiempo (más un tiempo mínimo para cubrir publicaciones sin palabras, como imágenes).
También había esta otra que daba una pista sobre cómo podría llamarse el valor final: (aunque es antiguo, ¿quizás haya cambiado?)
No es de gran ayuda, seguro, pero pensé en compartirlo por si acaso.
He vuelto a examinar esto y parece que (en su forma más simple) es el topic.word_count multiplicado por la configuración de administración de ‘tiempo de lectura por recuento de palabras’ (500 palabras/min por defecto). Así que creo que esta consulta produciría los “temas más largos de leer” principales X:
-- [params]
-- integer :limit = 10
SELECT t.id as topic_id, (t.word_count)/500+1 AS estimated_read_time
FROM topics t
WHERE t.word_count IS NOT NULL
AND t.archetype = 'regular'
ORDER BY t.word_count DESC
LIMIT :limit
Aunque también existe la alternativa de ‘4 segundos mínimo’: (cantidad de publicaciones x 4)/60. Que está ahí para tener en cuenta los temas de fotos sin recuento de palabras. Así que funciona para ambos y muestra el que sea mayor. Pero aún no he descubierto cómo añadir eso.
Desafortunadamente, no tengo un sitio lo suficientemente grande como para probarlo adecuadamente. Pareció funcionar en una pequeña muestra de prueba, pero puede que necesite ajustes.
Editar: Añadí un parámetro ‘limit’ para que se acerque más a la especificación del OP.
Lo he intentado de nuevo. No estoy 100% seguro de este, ya que no tengo una muestra lo suficientemente grande para probarlo, pero ha recogido mis temas de prueba.
-- [params]
-- integer :limit = 10
WITH read_time AS (
SELECT t.id as topic_id,
(t.word_count)/500+1 as word_count_time,
(t.posts_count*4)/60+1 as post_count_time
FROM topics t
WHERE t.word_count IS NOT NULL
AND t.archetype = 'regular'
AND t.deleted_at IS NULL
)
SELECT topic_id, CONCAT (CASE WHEN word_count_time > post_count_time THEN word_count_time ELSE post_count_time END, ' min') AS estimated_reading_time
FROM read_time
ORDER BY estimated_reading_time DESC
LIMIT :limit