В настоящее время я регистрирую все действия пользователей и хочу показать их действия для людей, которые следят за ними, - вроде как Facebook делает это для друзей.
Я записываю все эти действия в таблицу со следующей структурой:
- id - PK
- идентификатор пользователя - идентификатор пользователя, чье действие регистрируется
- actiondate - когда действие произошло
- actiontypeid - идентификатор типа действия (типы действий, хранящиеся в другой таблице - например, следование за другими пользователями, запись в профилях людей, создание нового контента, комментирование существующего контента и т. д.)
- objectid - идентификатор объекта, который они только что создали(т. е. идентификатор комментария)
- onobjectid - идентификатор объекта, с которым они выполнили действие (т. е. идентификатор содержимого, к которому они прокомментировали)
ТеперьПроблема в том, что существует несколько типов действий, которые регистрируются ( actiontypeid ).
Каков наилучший способ получения данных для отображения пользователю?
Самый простой выход - это набрать людей, за которыми пользователь следит за набором данных, а затем просто пойти оттуда и взять всю остальную информацию из других таблиц (то есть имен пользователей, за которыми вы следите, только что начали следить, имена профилей пользователей, на которых они написали, и т. д.).Однако это создаст огромное количество небольших запросов и обращений к базе данных в цикле while.Не очень хорошая идея.
Я мог бы использовать объединения для извлечения всего в одном массиве данных, но как узнать, откуда можно получить данные всего за один запрос?- есть различные типы действий, которые требуют от меня просмотра нескольких разных таблиц для извлечения данных, основанных на actiontypeid ...
, т. е. чтобы получить Пользователь Xтеперь следует за пользователем Y Я должен был бы получить свои данные (имя пользователя пользователя Y) из таблицы последователей , тогда как пользователь X прокомментировал содержание Y потребуется, чтобы я заглянул в таблицу content , чтобы получить заголовок и URL контента.
Любые советы приветствуются, спасибо!