Я сделал нечто подобное с внутренним приложением, которое мы используем для связи.
По сути, у вас будет две таблицы: status_updates
и mentions
.Каждое обновление статуса имеет много упоминаний.Всякий раз, когда кто-то создает обновление статуса, вы сохраняете его в таблицу status_updates
.Во время этого процесса вы также можете использовать Regex для обнаружения любых @username
«упоминаний».Когда вы найдете упоминание, вы добавляете его в таблицу mentions
.Например, ваша таблица mentions
может выглядеть примерно так:
mention_id (Auto-incrementing key) | status_message_id | username_id
Таким образом, если вы хотите увидеть, упоминается ли кто-то в сообщении о статусе, вы можете выполнить быстрый поиск в таблице status_messages
, в отличие от загрузки сообщения о состоянии и запуска Regex каждый раз.Еще одна приятная особенность этого подхода заключается в том, что он позволяет иметь несколько упоминаний в каждом сообщении о состоянии.Просто создайте запись в mentions
для каждого.
Это базовый способ, которым мы настроили ее.
РЕДАКТИРОВАТЬ: Если вы хотите получить «ленту активности» для данного пользователяПоказывая только обновления статуса, в которых они были упомянуты, это будет так просто:
SELECT * FROM mentions m LEFT JOIN status_messages s ON m.status_message_id = s.id WHERE m.username_id = $username_id
Я должен отметить, что это не так, как они делают это в Твиттере, потому что они имеют дело с проблемамимасштаб, который сделал бы этот простой способ сделать вещи невозможными.Тем не менее, я думаю, что это самое простое решение, которое хорошо работает, если вы не беспокоитесь о масштабировании до сотен тысяч пользователей.Если да, то, вероятно, у вас больше проблем, чем это.