Меня интересовало, как используются реакции на сайте, где я работаю на частичной занятости. Это форум о поступлении в колледжи, поэтому там есть посты о том, как студентов принимают или отклоняют из их мечтательных вузов и тому подобное. Мы используем как эмодзи «лайк», поэтому он занимает такое высокое место по сравнению с , который является «лайком» по умолчанию. Вот что я обнаружил:
Если вы хотите увидеть, как ваш сайт сравнивается с другими, вот запрос, который я использовал:
select ':'||reaction_value||':' reaction,
count(*) posts,
coalesce(sum(reaction_users_count), sum(like_count)) count
from discourse_reactions_reactions drr
join posts p on post_id = p.id
group by reaction_value
order by count(*) desc
Интересный факт: нам было сложно понять, почему эмодзи так часто используется в постах. В конце концов я вычислил виновника: .
Давайте перенесём это в #community, чтобы привлечь больше внимания.
Хотя запрос не учитывает лайки корректно, или, по крайней мере, не все наши (возможно, потому что мы включили реакции в середине процесса).
reaction
posts
count
52295
144915
1167
1224
1101
1236
в сравнении с:
reaction_value
count
1371442
1236
1224
Кстати, я использую небольшой вариант этого запроса для формирования нашей таблицы:
SELECT source.reaction_value,
count
FROM
(
(
SELECT
CASE WHEN post_action_type_id = 2 THEN 'heart' END AS reaction_value,
COUNT(*) AS count
FROM post_actions
WHERE post_action_type_id = 2
AND deleted_at IS NULL
GROUP BY 1
)
UNION ALL
(
SELECT
reaction_value,
SUM(reaction_users_count) AS count
FROM discourse_reactions_reactions
WHERE reaction_value <> 'heart'
GROUP BY 1
)
) AS source
GROUP BY 1,2
ORDER BY 2 DESC
Также есть стандартный отчёт в разделе отчётов для перекрёстной проверки (но таблицу из него не так удобно копировать и вставлять ) — /admin/reports/reactions
Ах. UNION ALL — это правильный способ выполнить этот запрос, поскольку вы считаете два совершенно разных показателя. Мой запрос требует внешнего соединения (outer join), чтобы охватить посты, у которых нет записи в discourse_reactions_reactions. Добавление этого соединения привело к таймауту запроса, поэтому я не могу проверить, решает ли это проблему. В любом случае, UNION здесь — верное решение.
Меня немного интересует, не приводит ли post_actions к завышению количества лайков. Учитывает ли он случаи, когда пользователь лайкнул пост, а затем удалил или изменил эту реакцию?
Мне пришлось заменить ‘heart’ на ‘+1’ в запросе, так как на College Confidential мы использовали для лайков. Вот результат выполнения этого запроса: