Как Youtube запоминает лайки? - PullRequest
1 голос
/ 23 января 2012

Поэтому мне интересно, как такие сайты, как YouTube, запоминают, когда пользователь "понравился" видео и не позволяет им снова его полюбить. Точно так же, как такой сайт, как Reddit, запоминает положительные и отрицательные голоса и не позволяет пользователю отказаться от части контента, за которую он уже проголосовал.

Это так же просто, как таблица базы данных, где хранится идентификатор контента вместе с идентификатором пользователя и его ответом? Я чувствую, что это стало бы огромным столом. Что-то более хитрое происходит?

Ответы [ 3 ]

9 голосов
/ 23 января 2012

Сайты требуют входа в систему, прежде чем нажимать «Нравится» и «Upvote».Контентный документ в БД будет иметь поле, в котором будет храниться количество полученных лайков.Перед тем, как кнопка «Мне нравится», сайты проверяют записи пользователя в БД, вошедшие в систему, чтобы проверить, понравился ли он ему, соответственно отображается опция «Мне нравится» или «Не нравится».

ЕслиВы проверяете здесь, в Stackoverflow, если вы нажимаете «upvote» на свой вопрос или ответ, отображается сообщение, что вы не можете поднять наш собственный пост.Что происходит, когда вы нажимаете «upvote», ajax-запрос будет отправлен на сервер с идентификатором пользователя и другой информацией, такой как идентификатор вопроса и т. Д., И код сервера проверит, разрешено ли вам голосовать, т.е. ваш идентификатор пользователя не должен совпадатьв качестве идентификатора создателя поста.

1 голос
/ 23 января 2012

На моей странице есть система "нравится / не нравится".

Таблицы базы данных:

1.) Тот, который содержит ваши сообщения с уникальным идентификатором для каждого сообщения и идентификатором пользователя, который его создал (наряду с другой информацией, такой как контент, теги и т. Д.).

2.) Таблица вызвала лайки с, по крайней мере, следующими полями: ID, post_id (соответствует записи в таблице постов, которая понравилась или не понравилась), user_id (соответствует пользователю в таблице пользователей, которая оценила / не нравится), статус (0 или 1, 0 понравился пост, 1 не понравился пост).

Когда пользователю нравится публикация, вставьте строку в таблицу лайков со своим user_id и post_id, установите статус 0 (или просто оставьте пустым, потому что 0 по умолчанию). Когда пользователю не нравится сообщение, сделайте то же самое, но установите статус 1.

Таким образом, на странице поста вы можете получить количество всех пользователей, которым понравился или не понравился пост. На странице профиля пользователя вы можете получить все сообщения, которые пользователю нравятся или не нравятся. Вы также можете оценивать посты, по которым больше всего нравится или не нравится. Или даже ранжируйте конкретных пользователей по тем, кто разместил контент с наибольшим количеством лайков или антипатий.

Не разрешать пользователям нравится / не нравится сообщение, если у него уже есть запись в базе данных. (В основном просто проверьте количество записей в таблице лайков, где post_id равен текущему сообщению, а user_id равен зарегистрированному пользователю)

Перекрестная ссылка на таблицу постов, чтобы получить user_id автора поста. Если автор сообщения user_id совпадает с пользователем, вошедшим в систему, или пользователь НЕ вошел в систему, не разрешайте им голосовать.

Запросы для выполнения всего этого просты (просто SELECT * или SELECT user_id), но это основная идея.

0 голосов
/ 23 января 2012

Да, это так просто. Как правило, сайты используют IP-адреса, поэтому пользователи не голосуют дважды за разные учетные записи.

edit: Извините, я ошибся. Согласно Квентину, веб-сайты не основывают его на IP из-за вероятности того, что несколько пользователей имеют один и тот же IP и не пытаются использовать систему. На сайтах меньшего масштаба (по крайней мере, на некоторых из тех, что я использовал) реализована система голосования на основе IP, поскольку в противном случае было бы проще манипулировать ранжированием контента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...