Как организовать удаления записей из ленты пользователя?
После авторизации пользователя, он видит ленту неких записей, которые обновляются время от времени.
Пользователь может "скрывать" записи из своей ленты.
Нужно сделать так, чтобы если пользователь скрыл какие-то записи в ленте, то при следующей загрузке страницы с лентой записей, те записи которые он скрыл - не загружались в его ленту.
Вопрос в том, как правильно реализовать такую функцию, как хранить в базе "удаленные" записи конкретного пользователя и проверять их при выводе?
Мой вариант, это записывать id удаленной записи и id пользователя в таблицу и при выводе проверять, если запись с такием то id "удалена", то не выводить ее. Но мне кажется это ресурсоемкая фигня получится.
Это одна из задач которые не имеют однозначно правильного решения.
В любом случае решение будет затратным по ресурсам.
Я знаю 2 варианты:
1) Табличка hidden_post вида user_id, post_id
Пишем туда посты которые скрываем, на выводе фильтруем. [+] требуется не много дополнительного места для хранения [-] геморройная сборка ленты новостей (на больших данных where post_id not in (...) использовать нельзя )
2) хранить для каждого пользователя список id постов которые он должен видеть [+] простой вывод ленты постов пользователя [+] можно реализовывать всякие хитрые правила какой пользователь видит какой пост. [-] требуется МНОГО места [-] сложный код обновления этих списков [-] лента пользователя не бесконечная скорее всего.
В принципе варианты можно совместить, для свежих постов вариант 2, для старых - вариант 1.
ой, ладно - оптимизировать не проблема. большой post_id not in делать не обязательно - всегда можно ограничить по времени или еще как-то. Вообще, откуда там возьмется много постов? Ну сколько человек руками наудаляет?
Да просто добавьте поля статуса записи в базе и меняйте его. Например статус 1 запись опубликована, 2 удалена ну еще любые промежуточные состояния. А при выводе фильтруйте в запросе только с ос статусом, который вам нужен.
В итоге таблицs с записями должны иметь вид типо такого:
id, userid, messageid , вторая таблица содержит всю инфу о сообщении в том числе и статус. Их связываешь и имеешь счастье)
Ну и в чем проблема? Первая таблица связывает пользователя со всеми его сообщениями.
Например так:
id 1, userid 1, messageid 1;
id 2, userid 1, messageid 2;
....
id 1, userid 1, messageid 34;