1

我正在制作一个简单的评论系统,每个评论都有评分。

(你喜欢这个评论吗?)问题有两个按钮“”和“”。

我正在尝试找到一种简单的方法,即在单击按钮时,它会在数据库中更新投票数(如果说是或否)。

我在互联网上查看了几个地方,但除了我知道这不是一个大问题并且可以轻松完成之外,没有什么比这更具体的了。

列类型应该是什么以及如何在 html 按钮上编写查询?

4

3 回答 3

3

您在这里提出了一些带有强调含义的不同问题。我会尽力帮你弄清楚。

首先,数据库。

这里有几件事需要考虑:

  • 你有用户吗?如果这样做,您将必须创建一个投票表,将您的用户与其投票联系起来,如上一个答案中所建议的那样。您不想使用 COUNT 来知道有多少票。这在大型数据库上非常耗时。只需在您的评论表中创建一个计数器字段并增加/减少它,这样您就不必每次都计算。
  • 如果您没有用户并且任何人都可以在网站上投票,您可能需要考虑使用 cookie 或某种临时标识符(例如他们的 IP 地址,即使它根本不可靠)来防止机器人发送垃圾邮件票。这本身就是一个相当复杂的问题,我建议您将投票限制为注册用户。
  • 正如建议的那样,“投票”字段本身将是一个 TINYINT。

现在查询本身。

再一次,根据您的知识,有几种可能性。

  • 最简单的方法是创建一个表单,将结果发送到同一页面,并在加载页面时让 php 检查是否设置了发布数据。如果是这样,请发送带有帖子数据的查询。有很多教程解释了如何正确地做到这一点(数据卫生等)。
  • 但是,上述解决方案将重新加载整个页面。这很混乱,而且不是很有用。要创建更流畅的用户体验,您应该在 AJAX 中执行此操作。如果您是新手但想尝试一下,您应该查看jquery,这是一个很好的 javascript 库。
于 2013-09-03T08:51:21.370 回答
2

我建议您创建两个表:

Comments

  • CommentId,
  • CommentText,
  • ...其他列

Votes

  • VoteId,
  • CommentId(对此投票的评论),
  • UserId(如何评价评论),
  • Liked(标志 0(否)或 1(是))。

单击 HTML 按钮时,在投票表中插入一个新行。

然后要获得票数,您可以加入两个表并使用 a 计算第二个表中的数字GROUP BY

SELECT 
  c.CommentId,
  COUNT(COALESCE(v.VoteId, 0)) AS TotalVotes
FROM Comments AS c
LEFT JOIN votes AS v ON c.commentId = v.CommentId
GROUP BY c.CommentId;

如果需要,您还可以单独查询 likes = 0 或 likes = 1,这只是一个示例。

于 2013-09-03T08:38:22.230 回答
0

数据类型可以是任何你喜欢的。CHAR、VARCHAR、TINYINT 或 BOOL 都是流行的选择。就个人而言,我会选择 TINYINT。

正如您所说,这是一项简单的任务。我确信那里有关于将操作分配给按钮的讨论。

于 2013-09-03T08:40:25.477 回答