Использование эмодзи

Я планирую заменить retort на discourse reactions. Чтобы понять, какие эмодзи использовать, я хотел узнать статистику их использования на моём форуме. Так как я не нашёл готового запроса, делюсь своим:

Подсчёт эмодзи, добавленных плагином 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

Отлично. :slight_smile: Я раньше не использовал REGEXP_MATCHES, но только что протестировал эти запросы (вернее, второй. У меня не установлен Retort :slight_smile:).

Кажется, вам нужно использовать GROUP BY emoji, а не smiley. Также условие user_id > 1 исключит исходного администратора. Возможно, это намеренно, но я хотел упомянуть об этом. :+1:

Я также попросил Берта :robot: дать объяснение, если кому-то ещё это будет полезно:

Что сказал Берт:

Этот запрос используется для подсчёта количества использований каждого эмодзи в таблице 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, и сортирует результаты так, чтобы наиболее часто используемые эмодзи отображались первыми.

О, вы правы. Я изменил это на своём сайте, но забыл здесь. :blush:

Действительно, я должен был упомянуть об этом в своём посте. user_id 1 — это устаревший пользователь (когда на моём сайте ещё разрешались анонимные публикации), которого я не хотел включать в подсчёт.