Penso che l’approccio che ho suggerito in quell’argomento debba essere migliorato. Un problema è che solo gli utenti con livello TL3 e superiori possono aggiungere tag ai post su Meta. Ciò significa che la maggior parte degli utenti del sito non sarebbe in grado di seguire le mie istruzioni. L’altro problema è che finiremmo per avere sia argomenti senza risposta sia argomenti risolti con il tag data-explorer. Questo non aiuterebbe molto nella ricerca delle query.
Scusa per il ritardo nella risposta. Mi sono lasciato coinvolgere dalla questione su come organizzare le query dell’Esploratore di dati sul sito. Utilizzare il tag data-explorer sembra la soluzione ideale, ma gli argomenti che contengono una query dell’Esploratore di dati dovranno essere contrassegnati da un utente con stato TL3.
Penso che una query simile alla seguente ti fornisca le informazioni che stai cercando:
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
L’istruzione LIMIT 100 nell’ultima riga della query potrebbe essere modificata o rimossa se desideri ottenere più risultati.
Se scelgo quattro o cinque articoli a caso e confronto il risultato della colonna “tempo di lettura stimato” in questa query con il tempo di lettura stimato presente nel topic stesso, ottengo due numeri molto diversi?
Puoi utilizzare il tempo medio impiegato dagli utenti per leggere l’argomento.
In tal caso, puoi semplicemente modificare la funzione SUM in AVG, che apparirebbe così:
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
Ma questo significherebbe che, in media, una persona impiega 438 minuti per leggere quell’argomento principale? Sembra improbabile. Può sembrare sciocco, ma hai messo abbastanza zeri in 60.000?
Modifica: O forse la media include anche le riletture di un argomento? Quindi una lettura completa sarebbe di 61 minuti, ma in realtà gli utenti trascorrono in media 438 minuti lì dentro.
Ora però sono molto curioso di sapere come viene calcolato il Tempo di Lettura Stimato per il Riepilogo, dato che idealmente vorresti che corrispondessero. Anche riducendoli di un fattore dieci, si arriverebbe solo a una stima approssimativa.
Fatico a decifrare queste cose, ma sembra che utilizzi un calcolo basato sul numero di parole moltiplicato per il tempo (più un tempo minimo per coprire i post senza parole, come le immagini).
C’era anche questo, che dava un indizio su come potrebbe essere chiamato il valore finale: (anche se è vecchio, quindi potrebbe essere cambiato?)
Non è di grande aiuto, ne sono sicuro, ma ho pensato di condividerlo per ogni evenienza.
Ho dato un’altra occhiata a questo, e sembra (nella sua forma più semplice) essere topic.word_count moltiplicato per l’impostazione dell’amministratore ‘read time word count’ (predefinito 500 parole/min). Quindi penso che questa query produrrebbe gli “X argomenti più lunghi da leggere”:
-- [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
Anche se c’è anche l’alternativa ‘4 secondi minimo’: (numero di post x 4)/60. Che serve a tenere conto degli argomenti fotografici senza conteggio di parole. Quindi funziona entrambi, e visualizza qualunque sia il maggiore. Ma non ho ancora capito bene come aggiungerlo.
Sfortunatamente, non ho un sito abbastanza grande per testarlo adeguatamente. Sembrava funzionare su un piccolo campione di test, ma potrebbe essere necessario un aggiustamento.
Modifica: Ho aggiunto un parametro ‘limit’ per avvicinarlo alle specifiche dell’OP.
Ci ho provato di nuovo. Non sono sicuro al 100% di questo, dato che non ho un campione abbastanza grande per testarlo, ma ha raccolto i miei argomenti di prova.
-- [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