数据库更改:投票的用户

时间:2015-02-03 作者:Vonder

我有一个投票后系统,它将投票存储并显示为整数。当有人点击“加号”时,投票数增加1,而“减号”则减少1(与本网站上的方式完全相同)。问题是投票是基于cookies的,因此当刷新这些cookies时,用户可以再次投票。我想限制每个用户只投一票。

现在我想征求关于数据库设计的建议。目前,我在数据库中有我的自定义帖子类型“Question”和标准WordPress用户表。问题有一个名为“投票”的自定义字段,该字段将投票存储为单个整数。目标是能够为问题分配投票,这样我可以打印对特定问题投票的所有用户,或者检查用户是否已经对特定问题投票。

我是否应该创建另一个包含投票的表?或者添加有问题的新字段或用户?我不确定我应该实现什么样的数据库逻辑,所以如果有任何建议,我将不胜感激。

1 个回复
SO网友:Shawn

我会稍微修改一下您的设计,这样您就可以利用数据,并防止可能破坏统计数据的逻辑错误。

首先,我将上下投票存储为两个独立的元值。原因是,如果愿意,您可以同时显示这两个选项,也可以计算投票数占总投票数的百分比。例如,45人赞成,10人反对,81%的人赞成这个问题,55人投票。然后,您可以向用户显示这些统计信息。你现在的做法只能显示出净的正收益,而这并没有给实际的受欢迎程度提供背景,即+3并没有那么有用。

逻辑错误预防:如果您的代码为+1或-1,并且您的代码具有错误的逻辑,那么您的所有投票都可能是错误的。简单地按照用户的意图存储投票,然后使用检索/读取技术来执行逻辑,这样更容易。i、 e为了保持数据完整性,您永远不想编写破坏性逻辑。修复读取错误45up/55total比通过一组写入修改“投票”更容易。我的观点是,如何修复已覆盖的数据。

cookie有助于防止会话中出现多个请求,但跟踪使用或不使用cookie的用户的最佳方法是使用ajax,在他们尝试对问题查找进行投票后,用户会对当前问题进行投票(假设未设置cookie或cookie已过期)。通过这样做,您还可以允许他们更改投票。这意味着你需要做两件事中的一件,我认为这两件事可能很容易:

有一个记录用户投票方式的记录表,跟踪其用户名/用户id、问题编号和投票。这在纯mysql系统中是一种标准的非wordpress方式,但在这里也可能对您有意义。另一个选项可能是序列化用户对所有回答的问题的投票,并存储为一个对象。现在,由于您的信息是关于您的系统的简短信息,因此很难给出最佳答案;是使用另一个表还是序列化元表中的元字段。这应该会给你一些想法。

结束

相关推荐

Extending the database

我正在尝试向comments数据库中添加一个额外的列,该列将存储帖子/页面作者的用户ID。这是插件的一部分,该插件将显示新评论以回复帖子或其他评论。据我所知,Wordpress没有内置此功能,而是将评论放在一个大组中。我希望用户只快速看到与自己相关的评论。require_once(ABSPATH . \'wp-admin/includes/upgrade.php\'); global $wpdb; $wpdb->show_errors(); $query = \