所以我想知道像YouTube这样的网站如何记住用户“喜欢”视频并阻止他们再次喜欢它。同样,像Reddit这样的网站如何记住upvotes和downvotes,并阻止用户对他们已经投票的内容进行投票。
是否像数据库表一样简单,其中内容的ID与用户的ID及其响应一起存储?我觉得那会成为一张巨大的桌子。是否有更棘手的事情发生?
答案 0 :(得分:9)
网站要求您在点击“赞”和“upvote”之前登录。数据库中的内容文档将有一个字段,用于存储收到的喜欢的数量。在呈现like按钮之前,站点将检查数据库中登录用户的记录,以检查他是否已经喜欢它 - 因此显示“喜欢”或“不同”选项。
如果您在Stackoverflow中查看此处,如果您在自己的问题或答案上单击“upvote”,则会显示一条消息,表明您无法对我们自己的帖子进行投票。当您点击“upvote”时,会发出ajax请求,并将其与用户ID和其他信息(例如问题ID等)一起发送到服务器。服务器代码将检查您是否允许upvote,即您的用户ID不应该相同作为帖子创建者的ID。
答案 1 :(得分:1)
我的页面上有喜欢/不喜欢的系统。
数据库表:
1。)包含您的帖子的帖子,每个帖子都有唯一的ID,以及创建该帖子的user_id(以及内容,标签等其他信息)。
2.。表调用喜欢AT至少以下字段,ID,post_id(对应于帖子表中喜欢或不喜欢的帖子),user_id(对应于用户表中的用户喜欢/不喜欢),状态(0或1,0喜欢帖子,1不喜欢帖子)。
当用户喜欢帖子时,将该行与user_id和post_id一起插入到likes表中,将状态设置为0(或者只保留为空,因为0是默认值)。当用户不喜欢帖子时,请执行相同操作,但将状态设置为1。
这样,在帖子页面上,您可以获得喜欢或不喜欢帖子的所有用户的计数。在用户的个人资料页面上,您可以获得用户喜欢或不喜欢的所有帖子。您还可以对最喜欢或不喜欢的帖子进行排名。甚至可以根据哪些用户发布最喜欢或不喜欢的内容来对特定用户进行排名。
如果用户已经拥有数据库中的记录,则不允许用户喜欢/不喜欢该帖子。 (基本上只检查like表中的记录数,其中post_id等于当前帖子,user_id等于登录用户)
交叉引用帖子表以获取帖子的作者的user_id。如果帖子作者user_id与登录用户相同,或者用户当前未登录,则不允许他们投票。
执行所有这些操作的查询很简单(只需SELECT *或SELECT user_id),但这是基本的想法。
答案 2 :(得分:-4)
是的,就这么简单。通常,站点使用IP地址,因此用户不会在不同的帐户上投票两次。