Кодовые блоки, размещенные пользователями в категории

Иногда от других внутренних команд поступают требования по поиску определённой информации. Этот запрос оказался для нас полезным, чтобы найти необходимое.

-- [params]
-- user_id :user
-- int_list :category_ids = 0

SELECT 
    p.id AS post_id,
    p.raw, 
    p.created_at, 
    p.topic_id  
FROM posts p
WHERE p.user_id = :user
  AND p.topic_id IN (
    SELECT t.id
    FROM topics t
    WHERE (':category_ids' = 0 OR t.category_id IN (:category_ids))
      AND t.archetype <> 'private_message'
      )
  AND p.raw LIKE '%```%'

Я не уверен, экспортируете ли вы эти данные, но если вы используете их в Data Explorer, один из удобных приёмов, к которому я всегда обращаюсь для всех поисков по пользователям, — это параметр user_id, который предоставляет очень простое поле ввода для поиска:

-- [params]
-- user_id :user
-- int_list :category_ids = 0

SELECT 
    p.id AS post_id,
    p.raw, 
    p.created_at, 
    p.topic_id  
FROM posts p
WHERE p.user_id = :user
  AND p.topic_id IN (
    SELECT t.id
    FROM topics t
    WHERE (':category_ids' = 0 OR t.category_id IN (:category_ids))
      AND t.archetype <> 'private_message'
      )
  AND p.raw LIKE '%```%'

Этот вариант также включает «магию» AS post_id, превращающую p.id в рабочую ссылку в результатах на экране, а также расширяет параметр категории, позволяя выбирать все категории сразу или несколько (0 — все, или список через запятую для нескольких, например 4, 5, 6).

Этот запрос работает довольно быстро, но вот ещё один совет с альтернативным методом поиска по ключевым словам:

  1. Этот селектор ID пользователя просто потрясающий!
  2. Есть ли также селектор для категории?

Я обновил свой первоначальный запрос с этим! На самом деле я использовал SQL-конструктор Discourse AI, чтобы помочь мне это сделать. Это был поистине невероятный опыт, который экономит мне, вероятно, 4–5 часов каждую неделю.

Вы также можете расширить его для работы с версией списка пользователей, если хотите иметь несколько таких списков. Например:

-- [params]
-- user_list :users

SELECT 
    id AS user_id,
    created_at 
FROM users 
WHERE id IN (:users)

Здесь есть немного больше информации о некоторых других магических параметрах: Using Parameters in Data Explorer Queries

Существуют параметры category_id и group_id, хотя они не так удобны, как user_id, где появляется выпадающий список (они работают путем ввода имени, которое автоматически преобразуется в идентификатор). Тем не менее, они могут быть довольно полезны.

(Также ещё одна общая полезная информация, которая может помочь улучшить некоторые запросы с поддержкой ИИ, доступна здесь: Common Discourse data tips)