Общедоступные посты двух пользователей

Приведены следующие упрощенные модели:

  1. User(id, nickname, created_at)
  2. Post(id, user_id, image, text, created_at) ## A post belongs to a user
  3. ViewedPost(id, user_id, post_id, like_type, created_at) ##like_type can either be -1, 0 or 1

Я хотел бы получить сообщения, которые обычно нравились (like_type == 1) 2 разными пользователями (user1 и user2), отсортировано по created_atПо словам пользователя1.

Вот пример:

Даны user1, user2, post1, post2, post3, post4 и следующий сценарий:

  1. пользователю нравится 1 (like_type: 1) post2, post3, затем post1
  2. Пользователь user2 любит (like_type: 1) post4, post1, post2, затем post3

Самые популярные посты: post1, post2, post3. Поскольку я хочу, чтобы это оценивалось в соответствии с порядком лайков user1, это должно быть post2, post3, а затем post1.

1 ответ

Решение

Самостоятельное присоединение к ViewedPost делает работу Остальное - это оптимизация и форматирование синтаксиса:

SELECT post_id
FROM   ViewedPost v1
JOIN   ViewedPost v2 USING (post_id, like_type)
WHERE  v1.user_id = 1
AND    v2.user_id = 2
AND    like_type = 1
ORDER  BY v1.created_at;

Предполагая UNIQUE ограничение в ViewedPost на (user_id, post_id), так что один и тот же пользователь может иметь только одну запись на пост.

Другие вопросы по тегам