Я разработал расширение для браузера, которое будет полезно пользователям сообщества stackexchange. Это помогает идентифицировать важную или релевантную информацию в любом сообщении на основе их предыдущей активности. Это называется Stack Me First, обязательно проверьте, если интересно.
Одна из его функций — определить, есть ли какие-либо комментарии/ответы, добавленные пользователем в текущее сообщение, которые скрыты нумерацией страниц.
Теперь я хочу создать запрос данных, чтобы найти любую такую публикацию, которая может содержать скрытые комментарии, и вернуть эти вопросы, чтобы я мог добавить этот запрос в свою документацию, чтобы помочь пользователю начать использовать расширение.
Честно говоря, мне бы хотелось сделать это с помощью Stack Exchange API, но я не думаю, что это возможно.
Я знаю, что мы можем использовать запрос ниже , чтобы получить сообщения, которые я прокомментировал, но я хочу улучшить этот запрос, ища сообщения со скрытыми комментариями.
SELECT id, creationdate, text, postid AS [Post Link]
FROM Comments
WHERE UserId = '736172'
Чтобы получить количество комментариев, вам достаточно добавить одну строку в SELECT. В результате запрос будет выглядеть так:
SELECT
id,
creationdate,
text,
postid AS [Post Link],
(SELECT COUNT(*) FROM Comments AS c WHERE Comments.PostId = c.PostId) AS total_comments
FROM Comments
WHERE UserId = 736172
ORDER BY Id
Итак, я нашел этот пост , в котором описан алгоритм отображения комментариев под постом. Я написал запрос , который делает то, что нужно: находит все комментарии определенного пользователя, если они скрыты нумерацией страниц, и добавляет общее количество комментариев под публикацией. Итоговый запрос выглядит так:
WITH posts_with_user_comment AS (
SELECT
Posts.Id AS PostId
FROM
Posts
WHERE
EXISTS (
SELECT
1
FROM
Comments
WHERE
UserId = ##UserId##
AND Comments.PostId = Posts.Id
)
),
all_comments_under_post AS (
SELECT
Comments.*
FROM
posts_with_user_comment
JOIN
Comments
ON
Comments.PostId = posts_with_user_comment.PostId
)
SELECT
t.*,
t.PostId AS [Post Link]
FROM (
SELECT
*,
rank() over(PARTITION BY PostId ORDER BY Score DESC, CreationDate ASC) AS rnk,
count(*) over(PARTITION BY PostId) AS total_post_comments
FROM
all_comments_under_post
) AS t
WHERE
t.UserId = ##UserId##
AND rnk > 5
ORDER BY
PostId DESC
;
запрос , который вы упомянули в редактировании, возвращает все комментарии, а не только скрытые комментарии. Например, когда я запускаю запрос, я получаю этот пост в результате, в котором есть только 1 комментарий.
Это было сделано намеренно, чтобы вы могли видеть, что комментарии с флагом is_hidden действительно скрыты. Теперь я обновил запрос, чтобы отображать только те комментарии, которые скрыты страницей нумерации страниц.
Круто, теперь это работает. Я вообще-то не заметил столбец is_hidden
в предыдущем запросе .
Да, конечно.
Или можно ли получить количество комментариев для каждого сообщения в приведенном выше запросе?