mysql - 多个投票选项存储在 MySQL 表中

标签 mysql count voting voting-system

我有一个未定义数量的选项的投票(它只能有 2 个选项,但它也可以有 10 个或 20 个或更多选项可供选择)。我需要将当前的投票计数存储在 MySQL 表中。我想不出一种集中存储它们的方式,除了: 创建一个字段 vote_count 并存储映射到计数的投票选项序列化数组。 当新的投票数据进入该字段时,将读取、反序列化、递增适当的值,然后写入该字段。这需要 2 个查询,并且每秒可能有 5 个或更多选票传入。

所以我需要一种方法来存储未知数量的投票选项的投票计数并能够快速访问它(我需要投票页面上显示的每个选项的最新计数)并快速更新它(当新投票时进来)。它必须在 MySQL 表中。投票选项的数量没有“上限”限制。

最佳答案

处理多值属性或重复值的规范模式是添加第二个表。

考虑一个可以包含多个订单项的采购订单。我们在子表中表示行项目,在采购订单表中使用外键指向父表:

CREATE TABLE `purchase_order` (id int not null, foo varchar(200), ... );
CREATE TABLE `line_item` (id int not null, order_id int not null, ... ); 
ALTER TABLE `line_item` ADD FOREIGN KEY (order_id) REFERENCES order(id) ;


INSERT INTO purchase_order (id, foo) VALUES (101, 'bar'); 

INSERT INTO purchase_order (id, order_id) VALUES (783, 101);
INSERT INTO purchase_order (id, order_id) VALUES (784, 101);
INSERT INTO purchase_order (id, order_id) VALUES (785, 101);

我们可以获得与采购订单关联的行项目的计数,如下所示:

SELECT COUNT(1)
  FROM line_item 
 WHERE order_id = 101; 

或者,我们可以获得每个采购订单的订单项计数,如下所示:

SELECT o.id, COUNT(l.id) AS count_line_itesm
  FROM purchase_order o
  LEFT
  JOIN line_item l
    ON l.order_id = o.id
 GROUP BY o.id 

在您的情况下,您需要表示的实体是什么(人、地点、事物、概念或事件;可以唯一标识并且您需要存储有关的信息。

我很难概念化您需要表示的实体是什么。

poll -
poll_question - a single question on a given poll
poll_question_answer - a possible answer to a question to a given poll question
voter - 
ballot - associated with one voter and one poll (?)
vote - the answer given to a particular poll question

良好的数据库设计来自于对实体和关系的理解,以及开发合适的模型。

关于mysql - 多个投票选项存储在 MySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17688389/

相关文章:

php - 如何在php调用mysql过程中创建动态表

javascript - 如何使用文本框计算字符串中字符出现的次数?

javascript - 评级/投票和标签 API,它们存在吗?

php - 插入后如何更新数据?

java - Spring MVC : Handling data in an One to many relationship?

mysql - 在一个查询中两次选择,其中

sql - 计算Oracle中最大重复字符数

Java:计算文本文件/字符串中的空行数

ruby-on-rails - 如何将行为设置为不需要用户登录的投票?

mysql查询以检查用户是否投票