Какие реакции чаще всего используются в вашем сообществе?

Продолжение обсуждения из Реакции на Meta:

Меня интересовало, как используются реакции на сайте, где я работаю на частичной занятости. Это форум о поступлении в колледжи, поэтому там есть посты о том, как студентов принимают или отклоняют из их мечтательных вузов и тому подобное. Мы используем :+1: как эмодзи «лайк», поэтому он занимает такое высокое место по сравнению с :heart:, который является «лайком» по умолчанию. Вот что я обнаружил:

reaction posts count
:+1: 260494 720859
:100: 16116 25738
:heart: 13315 23523
:tada: 7538 22674
:rofl: 7200 15720
:mending_heart: 6341 26875
:bulb: 3854 4404
:astonished: 2795 4911
:smile: 2286 2881
:joy: 1758 2623
:sob: 1708 2360
:angry: 1613 3396
:wink: 336 352
:heavy_check_mark: 30 43

Я создал первоначальный список реакций, изучив какие эмодзи чаще всего используются в постах. Мы скорректировали список на основе обратной связи от участников. Мне нравится :heavy_check_mark:, но очень быстро стало ясно, что сообщество не разделяет эту любовь. Поэтому я заменил его на что-то другое.

Если вы хотите увидеть, как ваш сайт сравнивается с другими, вот запрос, который я использовал:

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

Интересный факт: нам было сложно понять, почему эмодзи :gift: так часто используется в постах. В конце концов я вычислил виновника: :robot:.

10 лайков

Давайте перенесём это в #community, чтобы привлечь больше внимания. :eyes:

Хотя запрос не учитывает лайки корректно, или, по крайней мере, не все наши (возможно, потому что мы включили реакции в середине процесса).

reaction posts count
:heart: 52295 144915
:+1: 1167 1224
:100: 1101 1236

в сравнении с:

reaction_value count
:heart: 1371442
:100: 1236
:+1: 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

Также есть стандартный отчёт в разделе отчётов для перекрёстной проверки (но таблицу из него не так удобно копировать и вставлять :slight_smile:) — /admin/reports/reactions

4 лайка

Ах. UNION ALL — это правильный способ выполнить этот запрос, поскольку вы считаете два совершенно разных показателя. Мой запрос требует внешнего соединения (outer join), чтобы охватить посты, у которых нет записи в discourse_reactions_reactions. Добавление этого соединения привело к таймауту запроса, поэтому я не могу проверить, решает ли это проблему. В любом случае, UNION здесь — верное решение.

Меня немного интересует, не приводит ли post_actions к завышению количества лайков. Учитывает ли он случаи, когда пользователь лайкнул пост, а затем удалил или изменил эту реакцию?

Мне пришлось заменить ‘heart’ на ‘+1’ в запросе, так как на College Confidential мы использовали :+1: для лайков. Вот результат выполнения этого запроса:

reaction count
:+1: 2089798
:mending_heart: 28167
:100: 27070
:heart: 24676
:tada: 24055
:rofl: 16778
:astonished: 5325
:bulb: 4590
:angry: 3547
:smile: 3078
:joy: 2623
:sob: 2443
:wink: 369
:heavy_check_mark: 43
2 лайка

Отличное замечание. Позвольте мне вернуться и добавить условие AND deleted_at IS NULL.

1 лайк