我计划用 discourse reactions 替换 retort。为了找出要使用的表情符号,我想知道它们在我的论坛上的使用情况。由于找不到相应的查询,我在此分享我的查询:
计算使用 retort 插件添加的表情符号
SELECT count(*), REGEXP_MATCHES(key, '([a-z_+]+)|retort') emoji
FROM post_details
WHERE extra = 'retort'
GROUP BY key
ORDER BY 1 DESC
计算帖子中的表情符号(不包括系统用户)
SELECT count(*), REGEXP_MATCHES(raw, ' :([a-z_]+): ', 'g') emoji
FROM posts
WHERE user_id > 0
GROUP BY emoji
ORDER BY 1 DESC
4 个赞
很好。
我以前从未使用过 REGEXP_MATCHES,但我刚刚试用了它们(嗯,第二个。我没有安装 Retort
)。
我认为您应该按 emoji 而不是 smiley 进行 GROUP BY。另外 user_id > 1 会排除原始管理员。这可能是故意的,但我想提一下。 
我还问了 Bert
寻求解释,以防其他人觉得有用:
Bert 的说法:
此查询用于计算 posts 表中每个表情符号的使用次数。
以下是查询的细分:
SELECT count(*), REGEXP_MATCHES(raw, ' :([a-z_]+): ', 'g') emoji: 这是查询的主要部分。它正在计算行数 (count(*)) 并使用正则表达式 (REGEXP_MATCHES) 来匹配和提取 raw 列中的表情符号。正则表达式 ' :([a-z_]+): ' 正在查找以冒号 (:) 开头和结尾,并且中间有一个或多个小写字母或下划线的模式。 ‘g’ 标志表示它将全局匹配,即查找所有匹配项,而不是在找到第一个匹配项后停止。匹配的表情符号随后被别名为 emoji。
FROM posts: 这指定了从中检索数据的表,在本例中是 posts 表。
WHERE user_id > 0: 这是一个过滤正在考虑的行的条件。仅包括 user_id 大于 0 的行。
GROUP BY emoji: 这将结果按 emoji 别名进行分组。这意味着对于每个唯一的表情符号,它将计算行数。
ORDER BY 1 DESC: 这将结果按结果集中的第一列(即计数)以降序排序。这意味着使用最频繁的表情符号将首先出现。
因此,总而言之,此查询计算 posts 表中每个表情符号的使用次数,针对 user_id 大于 0 的帖子,并按结果排序,以便最常用的表情符号首先出现。
2 个赞
哦,你说得对。我在我的网站上更改了它,但在这里忘了。
确实,我应该在帖子中提到这一点。user_id 1 是一个遗留用户(当时我的网站仍然允许匿名发帖),我不想将其计入计数。
1 个赞