8

我正在开发一个 PHP 应用程序,它有几个可以评论的对象。每个评论都可以投票,用户可以给它 +1 或 -1(如 Digg 或 Reddit)。现在我正计划有一个带有 user_id 和他们的投票信息的“投票”表,这似乎工作正常。

问题是,每个对象都有数百条评论,这些评论存储在一个单独的评论表中。加载评论后,我必须对投票进行统计,然后单独检查对用户的每张投票,以确保他们只能投票一次。这很有效,但似乎真的是数据库密集型的——很多查询只是为了评论。

有没有一种更简单的方法可以减少数据库密集度?我当前的数据库结构是最好的方法吗?

为了更清楚地了解当前的数据库结构:

评论表:

  • 用户身份
  • object_id
  • 总票数

投票表:

  • comment_id
  • 用户身份
  • 投票

最终目标:

  • 允许用户对每条评论只投票一次,至少有 # 个 MySQL 查询(每个对象有多个评论)
4

3 回答 3

11

为确保每个选民只投票一次,请使用以下字段设计您的投票表:CommentID、UserID、VoteValue。将 CommentID 和 UserID 设为主键,这将确保一个用户只能获得一票。然后,要查询评论的投票,请执行以下操作:

SELECT SUM(VoteValue)
FROM Votes
WHERE CommentID = ?

这有帮助吗?

于 2009-05-01T02:12:37.097 回答
0

为什么不保存每条评论的总票数?当新的投票发生时增加/减少。

然后,您必须检查用户是否专门为此评论投票,以便每个用户每条评论只允许投一票。

于 2009-05-01T02:15:50.003 回答
0

您可以放置​​一个 sql 连接条件,该条件返回当前用户对该对象所做的评论的所有投票,如果您没有得到任何行,则该用户没有投票。这与您在程序中逐条检查每个评论略有不同。

就数据库结构而言,将这些东西分开似乎是完全合乎逻辑的。投票 { user_id, object_id, object_type, vote_info ...)

你可能已经这样做了,抱歉,如果是这样的话,我无法从你的帖子中解释。

于 2009-05-01T02:23:04.263 回答