Объединение данных из разных таблиц для формирования новостной ленты

Скажем, у меня есть 2 таблицы: сообщение и продукт. Всякий раз, когда пользователь публикует новые продукты или сообщения, пользователи, которые подписываются на этого конкретного пользователя, будут обновлять свою ленту. Это похоже на ленту Facebook.

Проблема заключается в том, как объединить записи из двух разных таблиц, Message и Product, чтобы создать ленту новостей, ленту необходимо отсортировать по дате публикации.

Я думаю, что это сложно сделать, используя только SQL, или, может быть, мне нужна другая таблица и вставка новой строки всякий раз, когда создается новый продукт или сообщение?

спасибо за чтение, надеюсь, здесь можно получить помощь, спасибо !!


person Yong Fei    schedule 14.11.2009    source источник


Ответы (2)


Найдите общие элементы для сообщения и продукта, например, они оба являются типом сообщения, поэтому вы можете иметь что-то вроде:

post_model_01

Таблица сообщений имеет столбцы, общие для всех сообщений; таблицы сообщений и продуктов содержат только столбцы, характерные для каждой из них.


ОБНОВЛЕНИЕ

Для получения сообщений (изменено после 10.11.2009, 15:00)

SELECT * 
  FROM Message AS m
  JOIN Post as AS p ON p.PostID = m.PostID
WHERE p.LastChanged > '2009-11-10 15:00'

Чтобы получить продукты (изменено после 10.11.2009, 15:00)

SELECT * 
  FROM Product AS d
  JOIN Post as AS p ON p.PostID = d.PostID
WHERE p.LastChanged > '2009-11-10 15:00'

Чтобы получить все в одной таблице с NULLS в столбцах, которые не относятся к сообщению или продукту.

SELECT * 
  FROM Post AS p
  LEFT JOIN Message AS m p.PostID = m.PostID
  LEFT JOIN Product AS d ON p.PostID = d.PostID
WHERE p.LastChanged > '2009-11-10 15:00'
person Damir Sudarevic    schedule 14.11.2009
comment
Это называется наследованием? Какой оператор sql используется для получения последних сообщений на основе приведенной выше модели? Еще раз спасибо за помощь! - person Yong Fei; 15.11.2009
comment
Это максимально близко к наследованию в SQL; называется супертипом/подтипом. - person Damir Sudarevic; 15.11.2009

Чтобы сделать это в SQL, вы хотите выполнить объединение таблиц. В этом случае вы хотите присоединиться к Message и Product by User.

Вот ссылка на страницу Coding Horror, которая является лучшим объяснением объединений, которое я когда-либо видел, Визуальное объяснение соединений SQL

person Mike Munroe    schedule 14.11.2009