Я создаю веб-сайт, который создает как фиды активности для всего сайта, так и для пользователей.Я надеюсь, что вы сможете увидеть структуру ниже и поделиться своим мнением о том, выполняет ли мое решение эту работу.Это осложняется тем, что у меня есть несколько типов пользователей, которые сейчас не хранятся в одной главной таблице.Это связано с тем, что типы пользователей весьма различны, и создание нескольких разных таблиц для пользовательских метаданных, я думаю, будет слишком большой проблемой.Кроме того, существует несколько типов контента, на которые можно воздействовать, и несколько типов действий (отслеживание, отправка, комментирование и т. Д.).
Создать ленту активности для всего сайта просто, потому что все записывается в основную таблицу каналов, а я просто строю список.У меня есть основная таблица каналов в MySQL, в которой содержатся простые журналы:
- тип деятельности;
- тип целевого объекта;
- идентификатор целевого объекта;
- тип исходного объекта (т. Е. Пользователь или организация);
- идентификатор исходного объекта.
(Это просто большая справочная таблица, которая указывает сценарию, генерирующему канал, на соответствующие таблицы для каждой записи канала).
При создании пользовательского канала I 'Я пытаюсь найти способ объединить таблицу отношений с таблицей каналов и использовать ее для анализа результатов.У меня есть таблица отношений, состоящая из «следующих» отношений, которая похожа на таблицу каналов.Это проще, хотя ч / б только одному типу пользователей разрешено следовать другим типам контента / пользователям.
- идентификатор пользователя / источника;
- тип целевого объекта;
- идентификатор целевого объекта.
Столбцы 2 и 3 в таблице каналов и подписок совпадают, и я пытался использовать различные методологии JOIN, чтобы сопоставить их, а затем ограничить их любыми отношениями в следующей таблице, которые есть у пользователя.,Это не очень успешно.
Базовый запрос, который я использую:
SELECT *
FROM (`feed` as fe) LEFT OUTER JOIN `follow` as fo
ON `fe`.`feed_target_type` = `fo`.`follow_e_type`
AND fo.follow_e_id = fe.feed_target_id
WHERE `fo`.`follow_u_id` = 1 OR fe.feed_e_id = 1
AND fe.feed_e_type = 'user'
ORDER BY `fe`.`feed_timestamp` desc LIMIT 10
Этот запрос также пытается получить любой контент, созданный пользователем (какие данные вошли в систему).таблица фидов), которую пользователь, по сути, выполняет по умолчанию.
Этот запрос, похоже, работает, но мне потребовалось некоторое время, чтобы добраться до него, и я почти уверен, что мне не хватает более элегантного решения.Есть идеи?