Better tags query.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4339 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
Cory McWilliams 2023-07-06 00:37:16 +00:00
parent a4acee4939
commit 5decdf3afa

View File

@ -256,13 +256,22 @@ class TfElement extends LitElement {
} }
async load_recent_tags() { async load_recent_tags() {
let start = new Date();
this.tags = await tfrpc.rpc.query(` this.tags = await tfrpc.rpc.query(`
WITH recent AS (SELECT '#' || json_extract(content, '$.channel') AS tag WITH
FROM messages recent AS (SELECT content FROM messages
WHERE json_extract(content, '$.channel') IS NOT NULL WHERE messages.timestamp > ? AND json_extract(content, '$.type') = 'post'
ORDER BY timestamp DESC LIMIT 100) ORDER BY timestamp DESC LIMIT 1024),
SELECT tag, COUNT(*) AS count FROM recent GROUP BY tag ORDER BY count DESC LIMIT 10 recent_channels AS (SELECT '#' || json_extract(content, '$.channel') AS tag
`, []); FROM recent
WHERE json_extract(content, '$.channel') IS NOT NULL),
recent_mentions AS (SELECT json_extract(mention.value, '$.link') AS tag
FROM recent, json_each(recent.content, '$.mentions') AS mention
WHERE json_valid(mention.value) AND tag LIKE '#%'),
combined AS (SELECT tag FROM recent_channels UNION ALL SELECT tag FROM recent_mentions)
SELECT tag, COUNT(*) AS count FROM combined GROUP BY tag ORDER BY count DESC LIMIT 10
`, [new Date() - 7 * 24 * 60 * 60 * 1000]);
console.log('tags took', (new Date() - start) / 1000.0, 'seconds');
} }
async load() { async load() {