MySQL / PHP逻辑“投票”系统

时间:2011-10-04 05:16:42

标签: php mysql

我正在尝试构建一个系统,该系统将从我们的数据库中获取记录,允许用户对其进行“投票”(文本字段,而不是预设选项),并让系统决定3-5个相同的响应已收到,将其作为“最终答案”并继续前进。

例如,假设我们有一个名为“Bob”的记录。我们会问用户Bob来自哪个城市....没有预设选项,因此用户必须以文本形式回答。我希望系统能够理解可能存在垃圾条目。因此,如果有人说'波士顿',其他人说'纽约',另外三个人说'亚特兰大',我希望系统能够理解亚特兰大是我们将要采用的答案并将其作为最终答案。< / p>

这不完全是我们正在做的,但它是一个简化的版本,用于解释。

我需要帮助的是找出使用MySQL和PHP编写类似代码的最佳方法。我们应该如何将其存储在数据库中,如何处理虚假答案,跟踪给出一个答案的次数(上例中的亚特兰大)等等。

执行此操作的一种基本且低效的方法是为每个答案添加一个列,并在选择它时在列中添加一个....当该数字达到3时,我们会触发结束过程。

提前感谢您的帮助! 亚历

2 个答案:

答案 0 :(得分:0)

我的直觉是说:

  • 您投票的列(可能是另一个表中引用“Bob来自哪里?”的问题的ID。
  • 用户答案的​​列(在某种程度上规范化)。
  • 用于跟踪信息的列(IP地址,用户ID,如果可用等)。

这将允许您单独检测和删除垃圾邮件条目,并以编程方式拒绝对来自同一用户和/或IP的同一问题进行重新投票。

然后,为了确定问题何时有“最终答案”,您可以只计算投票数(每次提交答案),并查看您是否达到了3-5的投票门槛。为了提高效率,我想您只需要检查提交的答案,因为其他答复不会只是虚假地获得投票。

答案 1 :(得分:0)

没有简单的解决方案。因为您希望允许自由文本输入而不是静态选择。每当你给某人选择自由文本时,你应该会得到不同的结果。即使两个用户意味着输入相同的东西,他们也可能以不同的方式输入它。一个简单的解决方案是两个人进入旧金山。一个人可以进入“San Fran”而另一个人进入“SanFrancisco”。并且可能有许多不同的组合。特别是当你为人们拼错或使用俚语时。

我强烈建议您避免使用自由文字。但如果必须,您可以建立一个答案数据库,类似于您的建议。我建议使用不同的方法而不是明文答案。也许是MySQL Soundex Function。这将返回一个字符串,表示用户输入的声音。这假设您正在让用户输入单个单词。您可以通过比较levenshtein distance soundexes(以找到类似发音的单词)来进一步扩展它。

使用soundex可以帮助稍微匹配一些东西,但它仍然容易出问题。您可以使用许多不同的东西,例如approximate string matching,正则表达式和PHP的similar_text function。这些都可以改善您的结果,但最有可能增加复杂性。

但据我所知,没有简单的解决办法。