2009-12-27 172 views
-1

我甚至不知道我应该问什么问题。那么,我想为我的评论创建一个赞,但不知道如何或什么是最好的方式。我是否只是创造一个新的领域赞成?如何评论评论的工作?

+4

提示:提问时,提供一些背景。例如,当你说“你的评论”时,你的意思是说你正在为一个论坛或某些数据库存储评论,并且想要添加某种赞许字段?花多一点时间以智能,周到的方式说出你的问题将会使其他人更加关注你的问题。如果你不能写一个好问题,我们可能不会花时间写出一个好的答案。 –

回答

5

如果您需要跟踪谁在投票什么的,你或许应该做一个Votes表:

  • vote_id:主键。
  • user_id:进行此投票的用户的ID。 [Users表的外键。]
  • comment_id:表决的评论的ID。 [外键为Comments表。]
  • vote:投了票(如果你只有一个微不足道的大拇指向上/向下系统,可能是+1或-1)。
  • date:投票时。

评论的得分现在只是列的所有列的总和,具有comment_id

请注意,与简单地向您的Comments表中添加整数score列不同,这具有告诉您评论正在经历的争议程度的优势。在不知道投了多少票的情况下,净评分为零的两条评论可能会经历很多争议(人们对评论的优点同样存在分歧,因此总得分徘徊在0附近),或根本没有(没有人关心足够的投票)。

+0

vote_id实际上是不必要的,除非用户可以对同一评论发表多个投票。 –

+0

@Can:我认为有可能做一些事情,比如一旦投票就收回你的投票,只有最后一个投票。 –

+0

如果您使用MySQL(可能还有其他数据库),那么它将为您创建唯一的ID列,如果您没有创建一个。 –

1

这取决于你想要做什么。为什么不只在评论表上放置一个int列,存储评论的上/下大拇指总数?

4

只是存储一个int数量的评论已被投票的次数将受到滥用。您可能还希望将每个投票与投射该投票的用户相关联,这样可以防止人们对相同评论重复投票。

为了这个工作,我想你需要一个单独的表格来进行投票。该表中的每条记录都应该有投票人的评论ID和用户ID。

0

按照Bill和John的建议,创建一个单独的表格可能是最好的方法。但出于性能方面的原因,您可能仍然希望将votes列添加到comments表中。这样,当您只想显示评论的投票计数时,您不需要访问votes表。我相信这就是投票如何在SO上工作。

0

在您的评论表中创建2个字段,vote_upvote_down,并在用户投票时相应增加其计数器,这样您可以将评分分数显示为这些值的总和或百分比,在后面的情况下,您可以添加第三个字段vote_score存储百分比分数,如果你想能够按分数排序。

然后创建投票表,以防止用户投票两次同样的评论,永远或在给定的时间跨度,如果是只设置cron作业每天运行一次,并删除条目年纪比time()-(86400 * DAYS_TO_KEEP_VOTE)

  • COMMENT_ID
  • user_id说明
  • vote_time

好运。